Spring JDBC QueryForList 报错: Parameter index out of range 解决方法

在使用 Spring JDBC 的 jdbcTemplate.queryForList() 方法执行查询时,你可能会遇到以下错误:

PreparedStatementCallback; SQL [select id,un_code from t_dept where un_code in (:values)]; Parameter index out of range (1 > number of parameters, which is 0).; nested exception is java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0)

这个错误是由于在 SQL 语句中使用了参数占位符 ':values',但是在传递参数时没有正确设置参数的值导致的。

原因分析

jdbcTemplate.queryForList() 方法需要将 SQL 语句中的参数占位符与实际的参数值进行匹配。当使用 :values 这样的参数占位符时,你需要提供一个包含参数值的 Map 对象,其中键值对的键为参数占位符名称,值为参数值。

解决方法

为了解决这个问题,需要将参数的值以键值对的形式传递给 jdbcTemplate.queryForList() 方法。可以使用 Collections.singletonMap() 方法创建一个包含参数名称和值的 Map。

确保 dsUnicodeList 是一个包含参数值的 List。然后将该 Map 作为第二个参数传递给 jdbcTemplate.queryForList() 方法。

以下是修改后的代码:

String selectDsDept = 'select id,un_code from t_dept where un_code in (:values)'; 
List<Map<String, Object>> dsMapList = jdbcTemplate.queryForList(selectDsDept, Collections.singletonMap('values', dsUnicodeList));

这样应该能够正确地设置参数值并执行查询。

总结

在使用 jdbcTemplate.queryForList() 方法执行查询时,需要确保参数占位符与参数值的匹配,并以 Map 对象的形式传递参数值。正确使用参数占位符和参数传递方式可以有效避免“Parameter index out of range”错误。

Spring JDBC QueryForList 报错: Parameter index out of range 解决方法

原文地址: https://www.cveoy.top/t/topic/qAkd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录