无法将多个参数传递给 SQL 语句到通配符 [重复]
Posted
技术标签:
【中文标题】无法将多个参数传递给 SQL 语句到通配符 [重复]【英文标题】:Can't pass multiple arguments to SQL statement into wildcard [duplicate] 【发布时间】:2021-02-06 14:39:24 【问题描述】:我有这段代码
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 数据库。
【问题讨论】:
【参考方案1】:您可以使用以下方式
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")));
【讨论】:
【参考方案2】:您可能需要使用 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"))
);
【讨论】:
以上是关于无法将多个参数传递给 SQL 语句到通配符 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
将更多/多个参数传递给 Python subprocess.call [重复]