档案模型 Bad numeric input format ‘
(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