Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting ArrayIndexOutOfBoundsException while setting prepared statement

Tags:

java

I am getting following exception while setting the parameters for the 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;
}
like image 736
unknown idetifier Avatar asked Dec 01 '25 16:12

unknown idetifier


1 Answers

Refer to "JDBC - Oracle ArrayIndexOutOfBoundsException"

ArrayIndexOutOfBoundsException when use AutoGeneratedKeys and Oracle

I had similar issues ended up doing

1>Get a sequence value before calling create( method params ... ) long sequnceVal = getSequence( String sequenceSql);

2>Change prepareStatement to

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

    PreparedStatement statement = connection.prepareStatement(sql);

    setValues(statement, values);
    return statement;
}
like image 165
user21 Avatar answered Dec 04 '25 07:12

user21



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!