2012-05-13 2 views
4

Я запускаю mysql 5.5 с помощью соединителя mysql 5.1.18. простой запрос стиляResultSetImpl throws NullPointerException

select * from my_table where column_a in ('aaa','bbb',...) and column b=1;

выполняется внутри приложения Java. запрос возвращает набор результатов из 25 тыс. строк, по 8 столбцов в каждом. при чтении результатов в то время как петли

while(rs.next()) 
{ 
    MyObject c= new MyObject(); 
    c.setA(rs.getString("A")); 
    c.setB(rs.getString("B")); 
    c.setC(rs.getString("C")); 
    ... 
} 

следующий исключение, как правило, в течение первых циклов, но никогда не в том же ряду:

java.lang.NullPointerException 
    at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5720) 
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5570) 
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5610) 

я взял посмотреть на исходный код в ResultSetImpl .java: 5720 и я вижу следующее:

switch (metadata.getSQLType()) 

где метаданные

Field metadata = this.fields[internalColumnIndex]; 

и getSQLType - это не логический приемник, возвращающий int. что интересно, что один и тот же объект метаданных неоднократно называется несколькими строками выше с другими геттерами и не исключает никаких исключений.

Кстати, нет проблемы с запросом выше, когда он выполняется непосредственно в mysql. приложение работает в aws.

любые идеи, как это решить? спасибо.

+0

я попытался воспроизвести это на локальном сервере, но все работало нормально. я собираюсь ограничить количество значений в части «in()» запроса и выполнить несколько выборок до тех пор, пока не будут выполнены все выборки. – atarno

+0

я получил подобную ошибку с MySQL-разъем-Java 5.1.34: Вызванный: java.lang.NullPointerException на com.mysql.jdbc.ResultSetImpl.checkColumnBounds (ResultSetImpl.java:757) в com.mysql. jdbc.ResultSetImpl.getStringInternal (ResultSetImpl.java:5240) в com.mysql.jdbc.ResultSetImpl.getString (ResultSetImpl.java:5162) в (мой код здесь) Я думаю, что это было, вероятно, вызвано ранее исключением: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: после закрытия соединения никакие операции не разрешены. – Shannon

+0

@atarno Вы когда-нибудь находили решение своего вопроса? Я получил аналогичное исключение, используя mysql-connector 5.1.40. Мой вопрос: [здесь] (http://stackoverflow.com/questions/41616564/occasional-nullpointerexception-in-com-mysql-jdbc-resultsetimpl-checkcolumnbound). – Eran

ответ

0

По моему опыту, эта ошибка является результатом блокировки таблицы при попытке чтения/записи одновременно из одной таблицы. Вам нужно добавить пул для каждого запроса или некоторое время ожидания между каждой операцией в MySQL.

Связанные ответ, а также: Getting java.sql.SQLException: Operation not allowed after ResultSet closed

Смежные вопросы