mysql – ResultSetImpl抛出NullPointerException

我用mysql 5.1.18连接器运行MysqL 5.5.
一个简单的风格查询

select * from my_table where column_a in(‘aaa’,’bbb’,…)and b = 1;

java应用程序中执行.查询返回25k行的结果集,每行8列.在while循环中读取结果

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的无逻辑getter.有趣的是,相同的元数据对象被上述几行与其他getter多次调用,并且不会引发异常.

顺便说一句,在MysqL中直接运行时,上面的查询没有问题.
应用程序在aws中运行.

任何想法如何解决这个问题?
谢谢.

解决方法:

我遇到了这个问题,使用Spring Data CrudRepository,从AWS RDS上运行的MysqL数据库中检索结果流,并进行了适度的复杂查询.

在大约30k行之后,它也会抛出一个不确定的行.

我通过使用@Transactional注释调用方法解决了这个问题.

虽然您没有使用JPA,但为数据库访问设置事务可能会对您的问题有所帮助.

相关文章

连接数据库的方式:第一种方式:ODBC:开放数据库连接是微软...
JDBCRequest 使用VariableNamesmysql:数据库连接池对象var...
 1.JDBCDBC(JavaDataBaseConnectivity):Java数据库连接技术...
1.需要jar包的支持:java.sqljavax.sqlmysql-conneter-java....
1.简介Activiti是一个业务流程管理(BPM)框架,它是覆盖了业务...
1.JDBC体系系统一组规范:接口JDBC接口(API)包括两个层次:...