Oracle --mybatis 中执行一直报“无效数字”java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字

这是今天困扰了我的问题,在编译执行代码的时候,发现一直报错,打印错误日志后发现,是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数据库表中,再重新查询并重启项目。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值