多参数“IN”预处理语句

时间:2012-03-20 16:07:34

标签: sql jdbc prepared-statement in-clause

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

例如,在此SQL语句中,我将无限期地使用?

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

我已经读过这个了 PreparedStatement IN clause alternatives?

但是我无法弄明白如何将它应用到上面的SQL语句中。

3 个答案:

答案 0 :(得分:2)

没有一种标准的方法可以解决这个问题。

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

我还看到过传入逗号分隔列表然后通过函数解析成表然后用于连接的情况。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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