相关文章推荐
沉稳的饭卡  ·  SET命令詳解·  2 月前    · 
跑龙套的荔枝  ·  Download Source ...·  3 月前    · 
不羁的眼镜  ·  IBM Documentation·  5 月前    · 

本文为在使用pgsql中,遇到的一个奇怪问题,暂时还没找到具体的原因,选择用其他类型替代来解决。

最近遇到了这样的一个问题,当将java中的数据(临近整型数据边界点的数据)存储到pgsql的float8类型字段时,总是出现数据异常的问题。例如存储数据为2147483647,存储的结果会变为2147483648等等。因此导致了数据异常的问题。

问题分析及解决

面对这个问题,首先推测为数据库类型问题或java中字段类型问题导致。于是第一步进行数据库问题的排除。将插入的sql复制出来,直接在数据库中进行执行时,得到正确的结果。这就表明问题在于java项目,而不在于数据库。插入结果如下所示:

确定了问题原因,进行下一步处理。首先进行第一步,断点调试。在java代码中进行断点,查看接收到的数据。可以看到由于数据与实际数据不匹配,float类型的精度与实际的需求不符合。 由于好奇心驱使还进行了另一次的测试,也就是输入值使用-214748362,但结果同样令人吃惊:

可以看到,数据同样被修改。经过测试及资料的查找发现,当float类型的位数大于7位时,会产生数据异常的问题。因此该场景下不适合使用float进行操作。将字段的类型变化为double,得到的断点结果与数据库结果均为正常值,至此该问题解决完毕。

由于float类型的精度很容易出现问题,在使用java中该类型时,一定要增加对于边界点的测试工作,防止出现问题的数据异常。

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。
  • 京东云开发者
    私信