我有这个代码片段
final List<Account> result = this.jdbcTemplate.query(LIST_OF_ACCOUNT_SQL, new String[]{ids},
当我只通过一个像这样的论点时
final String ids= "3213";
代码运行良好。
但我在将多个参数传递给我的通配符时遇到了问题
final String ids= "3213, 2313";
这是我的SQL
"SELECT ID, NAME FROM ACCOUNT WHERE STATUS = 'OK' AND ID IN (?) ";
我使用的是Oracle数据库。
您可以使用以下方式
String inSql = String.join(",", Collections.nCopies(ids.size(), "?"));
List<Account> result = jdbcTemplate.query(
String.format("SELECT ID, NAME FROM ACCOUNT WHERE STATUS = 'OK' AND ID IN (%s)", inSql),
ids.toArray(),
(rs, rowNum) -> new Account(rs.getInt("ID"), rs.getString("NAME")));
您可能需要使用负责数组数据的NamedParameterJdbcTemplate
和MapSqlParameterSource
:
static String LIST_OF_ACCOUNT_SQL = "SELECT ID, NAME FROM Accounts WHERE STATUS = 'OK' AND ID IN (:ids)";
private NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
public static List<Account> getAccountsByIds(String[] ids) {
SqlParameterSource parameters = new MapSqlParameterSource("ids", ids);
return this.namedJdbcTemplate.query(
LIST_OF_ACCOUNT_SQL,
parameters,
(rs, rowNum) -> new Account(rs.getInt("ID"), rs.getString("NAME"))
);
}