今天继续搞任务,写完sql语句后,并在数据库管理工具Navicat Premium上测试,测试没问题后,我把sql语句放到mapper.xml文件上,结果运行时老是报错,错误信息如下:
java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2).
出现错误,我一点都不慌,把错误信息复制,在网上百度一下该错误,出现很多篇解决文章,我点开几篇,发现都是一个错误解决方案:mybatis表达式不能再加引号(以下是其他文章的sql错误语句)
<insert id="addInfo" parameterType="payInfoEntity">
insert into payinfo values('#{pnum}','#{sumprice}','#{paydate}','#{pname}','#{yunprice}','#{shoupeople}','#{status}')
</insert>
也就是SQL语句不能是’#{pnum}’,而是#{pnum},把引号去掉。
然后我查看我的sql,并没有任何参数有加单引号的。看过四五篇文章后,我放弃了,还是自己慢慢找错误吧。
审查了sql语句一会,最后,我在感觉可能发生问题的地方改了下,如下所示:
原:
<if test="startTime!=null and endTime!=null">
and ncsf.create_time >= '2020-12-01 00:00:00' -- #{startTime}
and ncsf.create_time <= '2021-12-31 23:59:59' -- #{endTime}
</if>
我把最后面的注释去掉后,就正常了
改了后:
<if test="startTime!=null and endTime!=null">
and ncsf.create_time >= '2020-12-01 00:00:00'
and ncsf.create_time <= '2021-12-31 23:59:59'
</if>
总结:
原来是注释搞的鬼,但我其他地方也有注释啊,为啥就这里出现了问题呢?我猜测,可能是我注释的内容的问题吧,我其他地方注释的是备注,是文字,而这里我注释的是参数,所以解析的时候认为是多了一些符号吧。