今日同事那边暴露出来一个错误,然后截图如下:
根据问题出现的原因,大体意思是查询是空或无效的 SQL 语句或SQL 语句为空,根据截图自己也百度了下具体的问题,意思差多不,但是还是不知道SQL语句为啥为空,然后根据接口对应的SQL,然后一步步去解析问题出现的原因。
根据网上搜寻的答案,大体上有下面几种可能: 1、SQL不存在; 2、MyBatis批量修改出现mysql的SQL不存在,使用的是模版QL; 3、mysql中数据类型decimal没有设置默认值,且在执行过程中容易出现NPE;
核对了上述几种情况,发现我这边字段类型使用的是decimal,但是不足以造成这种情况,已经核对了SQL脚本正确且已经形成,因为在另一个项目中也是这种情况,并没有造成Query was empty,此时排除1。当前项目中并没有使用到MyBatis,而是使用的Spring JdbcTemplate,所以也排除了2。针对3这种情况,我这边的的确确是使用的这种数据类型,但在另外一个项目也正常显示,我把SQL脚本放到数据库也是可以正常显示数据,所以也排除了这个3。
那具体是什么原因呢?后来了解到,前端在调用接口时,将数据接口调用一次之后存储到了redis,然后每次读取接口并不是实时从项目中获取,而是读取的redis中的数据,而此时数据库中的SQL模版我这边已经替换掉了,但是redis并没有更新,导致找不到SQL模版。
解决办法:清理掉redis的数据,重新调取接口即可。
参考资料: 1、https://blog.csdn.net/qq_38776922/article/details/78522365 2、https://www.php.cn/mysql-tutorials-72530.html 3、https://blog.csdn.net/weixin_41751625/article/details/79465160 4、https://blog.csdn.net/u012373281/article/details/109530924 5、https://blog.csdn.net/java_zhangshuai/article/details/98077548