内容简介

今天遇到一个异常,报出消息为SQL Error: 0, SQLState: S1009,Invalid value for getLong() - 'PH',排查问题后,结果令人哑然失笑,也许Ctrl+C,Ctrl+V让程序员们用的很娴熟,但Ctrl+V之后还是要细心检查代码。

异常

7d26a14a3e64062d2f60e5ba514364cc.png

看到这个信息,第一反应是执行SQL出错了,检查了参数,数据库字段的类型定义,没啥问题,把参数替换后在Navicat中也能执行并有结果

代码:

@Query(value = "select * from t_water_quality_evaluate where ITMID = :itMid AND WQGLLV < :wqgValue AND WQGULV >= :wqgValue limit 1",nativeQuery = true)

TwaterQualityEvaluate queryByItMidAndValue(@Param(value= "itMid") String itMid, @Param(value = "wqgValue") BigDecimal wqgValue);

字段字义:

f75103acf40eb684e700f66365e8e4ce.png

执行结果:

b69eb769b4201f11208b9224ec03b65e.png

这是啥问题呢?我们看信息第二句:Invalid value for getLong() - 'PH',问题出现在itMid这个参数上,我们传入值"PH",这是个varchar类型,却使用getLong获取值,赶紧看看实体类的定义:

f953b18883c0329b5a466ed2201f4470.png

看到了吗?定义了Long类型!改为String后就OK了。

这个问题明显是在编写实体类时,itMid的定义复制了上面id的代码,只改了名称,没有改类型造成的!

嗯,Ctrl+V之后,还是要细心一些好。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐