我试图弄清楚如何使用PreparedStatement
为SQL查询中的IN
子句设置多个参数。
例如,在这个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();