1

我试图弄清楚如何IN在我的 SQL 查询中使用PreparedStatement.

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

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

我已经在PreparedStatement IN 子句替代方案中读到了这一点 ?

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

4

3 回答 3

2

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

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

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

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

select * from ifs_db where img_hub = ? and ? LIKE '%#' + country + '#%'
于 2012-03-20T16:47:16.047 回答
1

Sormula 适用于任何数据类型(甚至是自定义类型)。为简单起见,此示例使用 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());
于 2012-03-21T12:17:41.660 回答
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();
于 2016-06-09T19:38:58.663 回答