【问题标题】:multiple parameter "IN" prepared statement多参数“IN”准备好的语句
【发布时间】:2012-03-20 16:07:33
【问题描述】:

我试图弄清楚如何使用PreparedStatement 在我的SQL 查询中为IN 子句设置多个参数。

例如在这个 SQL 语句中,我将有不定数量的?

select * from ifs_db where img_hub = ? and country IN (multiple ?)

我在 PreparedStatement IN clause alternatives?

但是我不知道如何将它应用到我上面的 SQL 语句中。

【问题讨论】:

  • 你看到其他问题的链接了吗? javaranch.com/journal/200510/Journal200510.jsp#a2
  • 是的,我做了...我做了一些研究
  • 他们中的大多数使用“id”或 int 作为参数。我想知道如果参数是字符串,它会如何应用。谢谢,
  • 在 Java 中,您可以通过以下方式将参数设置为给定的 String 值:void java.sql.PreparedStatement.setString(int parameterIndex, String x) throws SQLException。另见docs.oracle.com/javase/8/docs/api/java/sql/…

标签: sql jdbc prepared-statement in-clause


【解决方案1】:

没有标准的方法来处理这个问题。

在 SQL Server 中,您可以在存储过程中使用表值参数,并在表中传递国家/地区并在连接中使用它。

我还看到过传入逗号分隔列表,然后由函数解析为表,然后在连接中使用的情况。

如果您的国家/地区是分隔列表中的标准 ISO 代码,例如“#US#UK#DE#NL#”,您可以使用相当简单的结构,例如:

select * from ifs_db where img_hub = ? and ? LIKE '%#' + country + '#%'

【讨论】:

  • 我会在 Oracle 中做同样的事情:带有数组 IN 参数和游标 OUT 参数的 CallableStatement。存储过程执行连接以形成 refcursor。
【解决方案2】:

Sormula 适用于任何数据类型(甚至是自定义类型)。 This example 为简单起见使用 int。

ArrayList<Integer> partNumbers = new ArrayList<Integer>();
partNumbers.add(999);
partNumbers.add(777);
partNumbers.add(1234);

// set up
Database database = new Database(getConnection());
Table<Inventory> inventoryTable = database.getTable(Inventory.class);

ArrayListSelectOperation<Inventory> operation =
    new ArrayListSelectOperation<Inventory>(inventoryTable, "partNumberIn");

// show results
for (Inventory inventory: operation.selectAll(partNumbers))
    System.out.println(inventory.getPartNumber());

【讨论】:

    【解决方案3】:
    You could use setArray method as mentioned in the javadoc below:
    
    http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#setArray(int, java.sql.Array)
    
    Code:
    PreparedStatement statement = connection.prepareStatement("Select * from    test where field in (?)");
    Array array = statement.getConnection().createArrayOf("VARCHAR", new    Object[]{"AA1", "BB2","CC3"});
    statement.setArray(1, array);
    ResultSet rs = statement.executeQuery();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 2012-05-28
      • 1970-01-01
      相关资源
      最近更新 更多