无法将多个参数传递给 SQL 语句到通配符中



我有这个代码片段

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")));

您可能需要使用负责数组数据的NamedParameterJdbcTemplateMapSqlParameterSource

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"))
);
}

最新更新