使用AutoGeneratedKeys和Oracle时ArrayIndexOutOfBoundsException

时间:2011-04-06 11:33:53

标签: java oracle jdbc

我使用ojdbc6-11.1.0.7.0以及何时:

ps = connection.prepareStatement("Insert into A (b, C) values (?, ?)", Statement.RETURN_GENERATED_KEYS);

我得到了

java.lang.ArrayIndexOutOfBoundsException: 3
    at oracle.jdbc.driver.OracleSql.computeBasicInfo(OracleSql.java:950)
    at oracle.jdbc.driver.OracleSql.getSqlKind(OracleSql.java:623)
    at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedStatement.java:1212)
    at oracle.jdbc.driver.T4CPreparedStatement.<init>(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)

我刚刚读到了这个错误here,但解决方案无效,因为我使用了Statement.RETURN_GENERATED_KEYS功能。

还有其他解决方案吗?

3 个答案:

答案 0 :(得分:2)

好的,此时我们做了工作:

  • 不带Statement.RETURN_GENERATED_KEYS
  • 插入
  • 因为我们使用序列生成id添加额外的查询:

    select seq.currval from dual
    

工作正常,但我们没有很多用户,这个解决方案不能防止多线程问题(我们可能会出错ID)。

答案 1 :(得分:-1)

试 ps = connection.prepareStatement(“插入A(b,C)值(?,?)”,Statement.RETURN_GENERATED_KEYS);

答案 2 :(得分:-3)

请使用oracle中的ojdbc6.jar(而不是ojdbc6_g.jar)。它将解决这个问题。