简体   繁体   English

设置预准备语句时获取ArrayIndexOutOfBoundsException

[英]Getting ArrayIndexOutOfBoundsException while setting prepared statement

I am getting following exception while setting the parameters for the sql 我在设置sql的参数时遇到异常

java.ljava.lang.ArrayIndexOutOfBoundsException: 8
at oracle.jdbc.driver.OracleSql.computeBasicInfo(OracleSql.java:950)
    at oracle.jdbc.driver.OracleSql.getSqlKind(OracleSql.java:623)
    at oracle.jdbc.driver.OraclePreparedStatement.(OraclePreparedStatement.java:1212)
    at oracle.jdbc.driver.T4CPreparedStatement.(T4CPreparedStatement.java:28)
    at oracle.jdbc.driver.T4CDriverExtension.allocatePreparedStatement(T4CDriverExtension.java:68)
    at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:3140)
    at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:3042)
    at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:5890)

Code: 码:

String sql = "insert into TEST_TABLE1(Field1,Field2,Field3,Field4,Field5,Field6,Field7,Field8,Field9,Field10) values(?,?,?,?,?,?,?,?,?,TEST_SEQ.nextval)";

protected static PreparedStatement prepareStatement(Connection connection , String sql , String idName, Object... values) throws SQLException{

    PreparedStatement statement = connection.prepareStatement(sql, new String[] {idName});

    setValues(statement, values);
    return statement;
}

protected static void setValues (PreparedStatement statement , Object... values) throws SQLException{
    for( int i = 0; i < values.length;i++){
        statement.setObject(i+1,values[i]);
    }
}

public long create (Connection connection, String sql, String idName, Object... parameters) throws ClassNotFoundException , SQLException{

    long key = -1;
    PreparedStatement statement = null;
    ResultSet resultset = null;

    try{
        statement = prepareStatement(connection,sql,idName,parameters);
        logger.debug("prepareStatement created");

        statement.execute();
        resultset = statement.getGeneratedKeys();

        if(resultset != null && resultset.next()){
            key = resultset.getLong(1)
        }
        logger.debug("key :"+key);

    }catch(SQLException sqle){
        logger.debug("error while creating db :"+slqe);
        throw sqle;
    } finally{
        close(statement,resultset);
    }
    return key;
}

Refer to "JDBC - Oracle ArrayIndexOutOfBoundsException" 请参阅“JDBC - Oracle ArrayIndexOutOfBoundsException”

ArrayIndexOutOfBoundsException when use AutoGeneratedKeys and Oracle 使用AutoGeneratedKeys和Oracle时ArrayIndexOutOfBoundsException

I had similar issues ended up doing 最后我遇到了类似的问题

1>Get a sequence value before calling create( method params ... ) long sequnceVal = getSequence( String sequenceSql); 1>在调用create之前获取序列值(方法参数...)long sequnceVal = getSequence(String sequenceSql);

2>Change prepareStatement to 2>将prepareStatement更改为

    protected static PreparedStatement prepareStatement(Connection connection,
        String sql, String idName, Object... values)
        throws SQLException {

    PreparedStatement statement = connection.prepareStatement(sql);

    setValues(statement, values);
    return statement;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM