档案模型 Bad numeric input format ‘

2019-01-08  本文已影响0人  livon居乐

(1)异常信息:Bad numeric input format ‘%%’  数值类型无法匹配'%%'

(2)点击档案模型,装配好条件,执行SQL查询时,发生错误。

①判断:类型转换不支持。

思路:1.通过数据库执行sql 确认 数据库支持数值类型使用like '%%' 操作,

排除数据库问题,可以确定导致问题为数据库驱动内部逻辑处理问题.

2.通过改写sql查询条件,对 where 的数值类型字段做造型处理造型成varchar

后进行like匹配,问题得以解决.

结论:

神通数据库 jdbc驱动与其他世面上数据库驱动程序行为不一致,与数据库本身行为也不一致导致的sql查询参数类型匹配 bug。

实现:

1.通过错误栈追到ArchiveModelDaoImpl.java类中,然后发现执行rs = pst.executeQuery();出现错误,暴露出了%%,也就是说数据库表和类型是数字类型,传进来的是字符串类型不匹配。

2.但是,在神通客户端使用cast函数做类型转换,转换成varchar。然后和java的string匹配了。

3.坑坑坑

      无坑不Java,我拿没有进行转换的函数放到数据库中测试没有问题。这就恶心了。

SELECT * FROM SYS_MODEL WHERE MODELNAME LIKE ? OR MODELTYPE LIKE ? OR DESCRIPTION LIKE ? OR cast(PROJECT_LEV AS varchar(22))  LIKE ? OR cast(FILE_LEV AS varchar(22)) LIKE  ? OR cast(INNERFILE_LEV AS varchar(22))  LIKE ? ORDER BY ID DESC

最后,想了半天发现问题出在驱动上,就是jar包的问题。就是客户端支持,但是驱动不支持,说到底还是不支持。然后我把sql更换成了cast的函数,问题解决。

4.解决

SELECT * FROM SYS_MODEL WHERE MODELNAME LIKE ? OR MODELTYPE LIKE ? OR DESCRIPTION LIKE ? OR cast(PROJECT_LEV AS varchar(22))  LIKE ? OR cast(FILE_LEV AS varchar(22)) LIKE  ? OR cast(INNERFILE_LEV AS varchar(22))  LIKE ? ORDER BY ID DESC

上一篇下一篇

猜你喜欢

热点阅读