微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐