我用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,但为数据库访问设置事务可能会对您的问题有所帮助.