public class Test{
@Autowired
private JdbcTemplate jdbcTemplate;
public void updateData(List<String> rollNbr){
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("rollNbr", rollNbr);
String sql = "UPDATE students set marks=50 where rollNbr IN (:rollNbr)";
jdbcTemplate.update(sql, parameters);
}
}
}
当我使用卷号列表调用 updateData 方法时,出现以下错误:
org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [UPDATE students set marks=50 where rollNbr IN (:rollNbr)]; The index 1 is out of range.; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: The index 1 is out of range.
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:110) ~[spring-jdbc-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) ~[spring-jdbc-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) ~[spring-jdbc-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) ~[spring-jdbc-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1402) ~[spring-jdbc-5.0.10.RELEASE.jar:5.0.10.RELEASE]
最佳答案
NamedParameterJdbcTemplate 解决了问题
更改:
public class Test{
@Autowired
private JdbcTemplate jdbcTemplate;
public void updateData(List<String> rollNbr){
NamedParameterJdbcTemplate jdbcNamesTpl = new NamedParameterJdbcTemplate(this.jdbcTemplate);
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("rollNbr", rollNbr);
String sql = "UPDATE students set marks=50 where rollNbr IN (:rollNbr)";
jdbcNamesTpl.update(sql, parameters);`
}
}
关于java - 我们可以在 jdbcTemplate 更新中使用 IN 子句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61962740/