ArrayIndexOutOfBoundsException при использовании AutoGeneratedKeys и Oracle - PullRequest
1 голос
/ 06 апреля 2011

Я использую 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)

Я только что прочитал об этой ошибке здесь , норешение не помогает, потому что я использую функцию Statement.RETURN_GENERATED_KEYS.

Есть ли другое решение?

Ответы [ 3 ]

2 голосов
/ 07 апреля 2011

Хорошо, в настоящее время мы создаем рабочую сумму:

  • вставка без Statement.RETURN_GENERATED_KEYS
  • , поскольку мы используем последовательность для генерации идентификаторов, добавляем дополнительный запрос, который:

    select seq.currval from dual
    

Это отлично работает, но у нас не так много пользователей, и это решение не защищает от многопоточных проблем (мы можем получить неправильный идентификатор).

0 голосов
/ 25 сентября 2011

Пожалуйста, используйте ojdbc6.jar (вместо ojdbc6_g.jar) из оракула. Это решит эту проблему.

0 голосов
/ 06 апреля 2011

попробовать ps = connection.prepareStatement («Вставить в значения A (b, C) (?,?)», Statement.RETURN_GENERATED_KEYS);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...