无法将多个参数传递给 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】:

您可能需要使用 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"))
    );

【讨论】:

以上是关于无法将多个参数传递给 SQL 语句到通配符 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数传递给 sql 'in' 语句?

如何将多个重复的参数传递给 CUDA 内核

有没有办法将多个参数传递给jquery函数[重复]

将更多/多个参数传递给 Python subprocess.call [重复]

MS Access - 从文本框中的用户输入将参数传递给 SQL 语句

SQL Plus 无法使用 Accept 将参数传递给我的存储过程