注释方式

在mapper.xml文件中,注释方式为<!--existence of query content-->,直接采用Java代码方式的注释/*existence of query content*/会报错,尤其是在SQL语句中出现这种注释方式时。

‘无效的列索引’bug和解决

昨天在导入数据时需要对数据进行验证,在mapper文件中对表中数据进行查询,将作废sql注释时选择了Java方式,此时会报错。

<select id="getSeqNameCount" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
	SELECT COUNT(*) COUN FROM tablename A
		WHERE  A.id=#id#  and  A.name=#name#
	/*SELECT * FROM tablename A
		WHERE  A.id=#id# and    A.name=#name#*/
	</select>

    
    

在解析时由于会将参数位置解析为占位符‘?’,所以此时以下的sql会在后台解析成如下,但是传入的参数只有两个,所以这个时候会报 “Caused by: java.sql.SQLException: 无效的列索引”,因为传入的参数和占位符数量不等。

SELECT COUNT(*) COUN FROM tablename A WHERE A.id=? and A.name=?
	/*SELECT * FROM tablename A WHERE  A.id=? and    A.name=?/

    
    

总结

1、mapper.xml文件中注释方式为<!--existence of query content-->
2、 “Caused by: java.sql.SQLException: 无效的列索引”错误一般由sql语句中占位符引起:
1传入参数数量不等与占位符的数量;
2SQL语句中的占位符?是中文版;
3SQL语句中的占位符?被放在字符串内;

Logo

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

更多推荐