несколько параметров "IN" подготовленный оператор - PullRequest
1 голос
/ 20 марта 2012

Я пытался выяснить, как можно задать несколько параметров для предложения IN в моем запросе SQL, используя PreparedStatement.

Например, в этом операторе SQL у меня будет неопределенное число ?.

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

Я читал об этом в Альтернативные предложения PreparedStatement IN?

Однако я не могу понять, как применить его к моему SQL-выражению выше.

Ответы [ 3 ]

2 голосов
/ 20 марта 2012

Нет стандартного способа справиться с этим.

В SQL Server вы можете использовать табличный параметр в хранимой процедуре, передавать страны в таблицу и использовать его в объединении.

Я также видел случаи, когда разделенный запятыми список передается и затем анализируется в таблице функцией, а затем используется в соединении.

Если ваши страны представляют собой стандартные коды ISO в списке с разделителями, например, "# US # UK # DE # NL #", вы можете использовать довольно упрощенную конструкцию, например:

select * from ifs_db where img_hub = ? and ? LIKE '%#' + country + '#%'
1 голос
/ 21 марта 2012

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());
0 голосов
/ 09 июня 2016
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();
...