代码 :
——————————————————————————————————————————————————————————————————————————————————————
basedao:
package dao;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class BaseDao {
public final static String driver = "oracle.jdbc.driver.OracleDriver";
public final static String url = "jdbc:oracle:thin:@192.168.1.250:1521:YIDEEORC102010";
public final static String dbName = "estock";
public final static String dbPass = "estock";

public Connection getConn() throws ClassNotFoundException, SQLException
{
Class.forName(driver);
Connection conn = DriverManager.getConnection(url,dbName,dbPass);

return conn;
}

public void closeAll(Connection conn,PreparedStatement pstmt,ResultSet rs)
{
if(rs != null)
{
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("3333");
}
}

if(pstmt != null)
{
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("222");
}
}

if(conn != null)
{
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("111");
}
}
}

public int executeSQL(String preparedSql,String[] param)
{
Connection conn = null;
PreparedStatement pstmt = null;
int num = 0;

try {
conn = getConn();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("aa");
}
try {
pstmt = conn.prepareStatement(preparedSql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("ccc");
}

if(param != null)
{
for(int i=0;i<param.length;i++)
{
try {
pstmt.setString(i+1, param[i]);
System.out.println("aa");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("qas");
}
}
}
try {
num = pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("sdwe");
}
closeAll(conn,pstmt,null);
return num;
}}
 ————————————————————————————————————————————————————————————
main:
package test;import java.sql.Connection;
import java.sql.SQLException;import dao.BaseDao;public class BaseDaoTest { /**
 * @param args
 * @throws SQLException 
 * @throws ClassNotFoundException 
 */
public static void main(String[] args){
BaseDao baseDao = new BaseDao();
Connection conn = null;

try {
conn = baseDao.getConn();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("ssqasd");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally
{
baseDao.closeAll(conn, null, null);
} }}-------------------------------------------------------------------------------------------------------------------------------------------------------------------
报错 :
java.lang.ArrayIndexOutOfBoundsException: 0
at oracle.jdbc.driver.OracleSql.main(OracleSql.java:1661)
---------------------------------------------------------------------------------------------------------
求大神~~~~

解决方案 »

  1.   

    OracleSql.java:1661
    这一行是哪一行代码???
    也不用代码视图,写这么长!
      

  2.   

     oracle.jdbc.driver.OracleSql.main(OracleSql.java:1661)
    这个应该是你测试类里面报错的
      

  3.   

    你代码写的太牛X了。你使用时应该执行了SQL操作吧?这个异常数组访问越界,你也就执行的时候写了数组。你数组传进去时候写错了吧。这代码也不应该这样写的!!
      

  4.   

    BaseDao这个类负责连接数据库,BaseDaoTest负责测试。其他的没问题啊我把两个类中的各个函数都注释掉还是有问题,除非将整个类注释。而且我点击 (OracleSql.java:1661) 显示1661不是有效的行号。。
      

  5.   

    运行以下代码import java.sql.*;
    public class OracleObject {
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    public static void main(String args[]) {
    try {
    Class.forName(DBDRIVER);
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    依然报错
      

  6.   

    看了下代码没有问题 main方法中只是单纯做连接便获取connection对象  并没有做任何操作 不存在问题... 并没有执行到public int executeSQL(String preparedSql, String[] param) ,应该不会报数组越界。
      

  7.   

    嗯,我也觉得,我在想会不会是驱动或者oracle.jdbc.driver.OracleSql.这里面有问题。
      

  8.   

    如果用的是Oracle11的话,有一个版本的驱动有问题的。
      

  9.   

    新异常
    java.sql.SQLException: Listener refused the connection with the following error:
    ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    The Connection descriptor used by the client was:
    192.168.1.250:1521:YIDEEORC102010 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:261)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:439)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:185)
    at dao.BaseDao.getConn(BaseDao.java:18)
    at test.Btest.main(Btest.java:20)
      

  10.   

    这个异常就是oralce监听器的问题,看看你oralce监听器是否启动?还有配置的SID对不对?好好核对一下,试着用客户端程序连接,看看能否成功!