我试图弄清楚如何IN
在我的 SQL 查询中使用PreparedStatement
.
例如,在这个 SQL 语句中,我将有不定数量的?
.
select * from ifs_db where img_hub = ? and country IN (multiple ?)
我已经在PreparedStatement IN 子句替代方案中读到了这一点 ?
但是我不知道如何将它应用到我上面的 SQL 语句中。
我试图弄清楚如何IN
在我的 SQL 查询中使用PreparedStatement
.
例如,在这个 SQL 语句中,我将有不定数量的?
.
select * from ifs_db where img_hub = ? and country IN (multiple ?)
我已经在PreparedStatement IN 子句替代方案中读到了这一点 ?
但是我不知道如何将它应用到我上面的 SQL 语句中。
没有标准的方法来处理这个问题。
在 SQL Server 中,您可以在存储过程中使用表值参数,并在表中传递国家/地区并在连接中使用它。
我还看到了以下情况:传入逗号分隔列表,然后由函数解析为表,然后在连接中使用。
如果您的国家/地区是分隔列表中的标准 ISO 代码,例如“#US#UK#DE#NL#”,您可以使用相当简单的结构,例如:
select * from ifs_db where img_hub = ? and ? LIKE '%#' + country + '#%'
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());
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();