Я думаю, что это ошибка. Я использую последнюю библиотеку MySQL JDBC. У меня несколько потоков. Каждый поток выполняет запрос и для каждой строки добавляет пакет в подготовленный оператор.NullPointerException при настройке параметров подготовленных операторов
Иногда инструкция «stmt.setLong (i, aLong)» запускает исключение NullPointerException. stmt, i и aLong не являются нулевыми.
PreparedStatement stmt = db.prepareStatement("myinsert");
while (rs.next()) {
long aLong = rs.getLong(1);
...
stmt.setLong(1,aLong);
stmt.addBatch();
}
Вот исключение:
java.lang.NullPointerException на com.mysql.jdbc.ConnectionImpl.getServerCharacterEncoding (ConnectionImpl.java:3124) в com.mysql.jdbc.PreparedStatement .setInternal (PreparedStatement.java:3729) на com.mysql.jdbc.PreparedStatement.setLong (PreparedStatement.java:3751) на org.apache.commons.dbcp2.DelegatingPreparedStatement.setLong (DelegatingPreparedStatement.java:127) в орг .apache.commons.dbcp2.DelegatingPreparedStat ement.setLong (DelegatingPreparedStatement.java:127) в com.mypackage.MyClass $ MyThread.run (MyClass.java:117)
Если я запустить только одну нить, она работает.
Исключение также происходит без библиотеки apache dbcp2.
Я схожу с ума!
Является ли 'PreparedStatement', к которому потоки добавляют партии, разделяемые несколькими потоками? – dasblinkenlight
№. Каждый поток создает собственное PreparedStatement. Каждое PreparedStatement является вставкой в одной таблице, но это разные объекты. – fran
Я предполагаю, что то же самое относится к набору результатов 'rs' в вашем примере, правильно? – dasblinkenlight