2012-03-20 2 views
1

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

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

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

Я прочитал об этом в PreparedStatement IN clause alternatives?

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

+0

Вы видите ссылку на другой вопрос? http://www.javaranch.com/journal/200510/Journal200510.jsp#a2 –

+0

да, я сделал ... Я сделал несколько ressearch – toink

+0

Большинство из них использовали «id» или int как их параметр .. Мне было интересно, насколько будет ли он применяться, если параметр является строкой .... thanks, – toink

ответ

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

Существует не стандартный способ справиться с этим.

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

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

Если ваши страны стандартные коды ISO в ограниченном списке, как «# США # UK # DE # NL #», вы можете использовать довольно упрощенно конструкцию, как:

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

Я бы сделал то же самое в Oracle: CallableStatement с массив IN и параметр OUT курсора. Сохраненный proc делает соединение для формирования refcursor. – Glenn

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