这是今天困扰了我的问题,在编译执行代码的时候,发现一直报错,打印错误日志后发现,是sql 语句报的错误,但sql 语句单独导出后在数据库中执行又能正常执行,查出数据。这是的很奇怪的现象。我把sql语句重新整理后放在代码里执行,又出现“无效数字”的字样。为此,,,我方了。
其实这是在Oracle中执行in()函数,user_no in (2,3)在数据库中执行成功,user_no 的数据类型是number 8 。在代码中我用Integer进行接收,理论上是可行的。执行中也没有问题,但放在代码中去运行缺报”无效数字“。当时我想这是不是数据类型不对应,导致查出的数据不能set 到实体类中,我把userNo的数据类型改成了Long,但还是不行,这是在和我较劲了啊,
我尝试了这几个方法:
1:user_no in (2,3) 改成user_no in ('2','3') 还是会报错,
2:in()函数改成 user_no =1 or user_no =2 还是会报错;
3:将数据强制改为to_number(2) 还是报错。
后来我猜测可能是数据的问题,有些数据是我直接在见表的时候,直接从表插入的数据不是使用insert语句进行插入的,可能存在数据类型的差异。
解决办法:
于是我将数据导出,生成sql insert 语句,重新插入一遍;插入完成后,重启项目,进行本地测试,惊喜的发现数据能正常展示了。
总结:数据库中的数据最好不要手动添加,要使用insert语句进行添加,这样能减少错误
oracle __-----如果是连表查询的话,出现无效数字的原因可能就是”=“两边的字段的数据类型不一致导致的,徐需要0将两边的数据类型转换成一致的类型,使用to_char或to_number()
注意:如果是mysql 则不需要进行数据类型的转换。oracle对字段类型要求比较严格。
遇到这种错误,1:先将sql 放到数据库中查询执行,如果报错,修改sql,如果没有请看第二点;
2:先检查数据库中字段类型是否和查询的返回值结果类型一致,如果一致,检查数据。请看第三点
3:将数据导出,可生成insert语句,删除原始数据,执行insert 语句,重新cherubic数据库表中,再重新查询并重启项目。