У меня есть многопоточная программа, которая соединяется с базой данных оракула.JDBC Oracle Результат набора Null Pointer Exception
Первый поток выполняет «большой» запрос и загружает объекты в LinkedBlockingQueue. Есть около 200 000 объектов.
Вторая нить опросает этот список, и для каждого объекта он запускает 14 других запросов, обновляя параметры объекта. Затем я подключаюсь к другой базе данных, в последний раз получаю соответствующий объект для этого текущего объекта, создаю гибридный объект, содержащий эти два объекта, и отправляет его в третий поток.
Я использую один оператор и несколько наборов результатов для каждого из этих 14 запросов.
stat=predefinedobject.getConnection().createStatement();
ResultSet rs = null;
ResultSet rs1 = null;
ResultSet rs2 = null;
ResultSet rs3 = null;
.
.
rs=stat.executeQuery(Query1);
while(rs.next()) {
object1.setParameter1(rs.getString(5));
}
SqlUtils.closeResultSet(rs);
rs1=stat.executeQuery(Query2);
while(rs1.next()) {
object1.setParameter2(rs1.getString(5));
}
SqlUtils.closeResultSet(rs1);
.
.
.
SqlUtils.closeResultSet(rs14);
SqlUtils.closeResultSet(stat);
Я получаю исключение null-указателя через некоторое время.
java.lang.NullPointerException
at oracle.jdbc.driver.T4C8Oall.getNumRows(T4C8Oall.java:876)
at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:825)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1049)
at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:845)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1154)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1313)
Какой сервер и драйвер Oracle версии? –
Я думаю, что мы используем Oracle 11g, не знаем о версии драйвера, хотя – user2133404
Ошибка возникает внутри драйвера, что может указывать на ошибку в драйвере; или, может быть, ваш 'SqlUtils.closeResultSet' игнорирует исключения, которые могут быть релевантными, приводящие к несогласованному состоянию внутри драйвера (что все равно будет ошибкой в драйвере). Я предлагаю вам 1) проверить версию драйвера и обновить до последней версии, 2) проверить, игнорирует ли ваш метод утилиты исключения и видит ли они какие-либо события. –