数据库查询异常处理

数据库查询异常处理,第1张

今天晚上运营同事反馈了系统有个列表数据查询不出来,筛选某个条件又能查出数据来。当运营反馈时,立马收到线上报警邮件提示如下:

也就是抛出 MySQLDataException异常,由于定性思维的原因,一直在排查sql问题,不断尝试替换某个字段的数据拼接查询,最终还是失败了。由于经验较少,不断尝试column '15'这一列,心想没有15这个字段呀(思维方向错误了)。导致问题排查了两个小时;最后联想到INTEGER类型出错,干脆就直接查找mode里的对象与sql查询查询出来的字段作比较,最终发现其实是某个字段数据值长度突然大增(部门其他同事对接大厂时,修改了字段长度,然后我们这边的系统无意识到字段长度,还是使用Integer类型,最终导致异常出现),修改成long类型后解决,但这种修改方法也会随着时间问题变成一个坑。

总结今晚遇到的问题,就是以前菜的坑太少了,导致问题定位错误。错误日志:'1.00000539598E11' in column '15' is outside valid range for the datatype INTEGER翻译过来也就是“15”列中的“1.00000539598E11”超出了数据类型整数的有效范围。不是15那个字段,而是第15列(MB   太SB了)。因此在此做个笔记,以防以后继续犯类似思维错误。

Result.next()只会在两种情况发生异常:一是数据库本身故障,二是已经关闭。

而在你的程序中只是为了防止出现一个异常不影响其它的,那么可以假定了,前面的访问是正确的。所以,第一个异常原因不可能出现的。而你不会自己主动在另一个线程关闭数据库吧?那么第二个异常原因也不可能出现。

所以,这个异常捕获了,不必做任何处理,直接进行下一个就行。

while(rs.next()){

try{

//..........

}

catch(SQLException ex){}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10083339.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存