【发布时间】:2019-02-08 11:25:24
【问题描述】:
当我使用 NamedParameterJdbcTemplate (mssql-jdbc 7.2.0) 时,我遇到了几个 sql 语句的问题。
例子:
return jdbcTemplate.query("SELECT Mitarbeiter, CASE "+
" WHEN Storno = 1 THEN Dauer * -1 "+
" WHEN Storno = 0 THEN Dauer " +
" END AS Wert "+
"FROM Werte " +
"WHERE Mitarbeiter IN (:mitarbeiter)", parameterSource, rs -> {
HashMap<String, Integer> hashMap = new HashMap<>();
while (rs.next()) {
hashMap.put(rs.getString("Mitarbeiter"), rs.getInt("Wert"));
}
return hashMap;
});
当我在 SQL Server Management Studio 中执行 sql 语句时,它工作正常。但是,当我使用 jdbcTemplate 执行语句时,会引发 SQLServerException "[...] The index 1 is out of range [...]" 。
也许是某些保留字符导致了问题?
更新:
将 spring-jdbc 从 7.2.0 降级到 7.0.0 后,我的代码工作正常。似乎新版本在解析 sql 语句方面存在一些问题。看看https://github.com/Microsoft/mssql-jdbc/issues/952。该问题将在 7.2.1 版本中修复。
【问题讨论】:
-
您可以将
Dauer * -1替换为-Dauer
标签: java sql sql-server spring jdbc