美文网首页
档案模型 Bad numeric input format ‘

档案模型 Bad numeric input format ‘

作者: livon居乐 | 来源:发表于2019-01-08 18:19 被阅读0次

    (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

    相关文章

      网友评论

          本文标题:档案模型 Bad numeric input format ‘

          本文链接:https://www.haomeiwen.com/subject/tcmbrqtx.html