java序列化相关问题 查询数据库的时候出现这个异常,我将查询到的结果封装到对象中。

java序列化相关问题 查询数据库的时候出现这个异常,我将查询到的结果封装到对象中。,第1张

首先,解释系列化知识:

Java序列化(系列化)机制可以被写入一个字节流的一个实例对象的状态信息,因此它可以透过插座,或持久存储到数据库,或者文件系统,在需要时,根据在字节流中的信息来重构一个相同的对象。序列化机制在Java技术具有广泛的应用,EJB,RMI等作为依据。

实现类java.io.ObjectOutputStream中java.io.ObjectInputStream中的类的序列化机制。序列(序列化)对象,实例化一个ObjectOutputStream对象,然后调用writeObject()方法反序列化(反序列化)时,ObjectInputStream的对象实例,然后调用readObject()方法。

高于你的错误在于一个或几个没有序列化的数据,导致没有办法创建一个输出流,导致发生java.io.NotSerializableException。

序列化的原因,我的猜测是,因为你的数据里面存在一个基于对象的数据,但对象不实现系列化。例如:如果你有一个地址字段,这个字段是一个类地址说明地址,这可能是全省的财产,城市,街道,等,或一些getter和setter方法,如果这个类没有实现系列化,通常这的问题。

毕竟,没有看到该程序,我猜,检查程序或进一步讨论的问题。

一般报错“无效数字”,是因为你对数值型字段,查询的时候输入了字符。可以尝试加个函数,比如 select * from table_name where to_char(column_name)='xxx' ,这样就不会报错了,不过会引起索引失效,记录数超多的(大于10万)表慎用。

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

也就是抛出 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了)。因此在此做个笔记,以防以后继续犯类似思维错误。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存