2013-11-29 3 views
3

У меня есть массив строк «String []» с определенными значениями. Я хочу передать этот массив динамически в SQL-предложение «IN» примерно так:Как передать массив строк динамически в SQL «IN» в Java?

Select * from Employee where emp_name in (?); 

Здесь «?» должен быть заменен на String Array. Я хочу сделать это в Java Class. Я пробовал с

Array array = conn.createArrayOf("VARCHAR", new Object[]{"1", "2","3"}); 
pstmt.setArray(1, array); 

Но он не работает и получает исключение «SQLFeatureException».

Спасибо !!!

+0

А также см [ PreparedStatement со списком параметров в предложении IN] (http://stackoverflow.com/q/3107044/2024761), в котором много ссылок, связанных с ним. – SudoRahul

ответ

0

Вы можете создать запрос с предложением IN, итерации массива String с помощью StringBuilder.

Я бы порекомендовал вам не усложнять использование Arrays.toString(), если вам это действительно не нужно. Не будет большой разницы в производительности, так как оба необходимы для итерации массива для создания литерала String.

В моем подходе мы можем иметь хороший контроль над итерацией массива, добавляющего одиночных кавычек и запятая т.д.

+0

Выше решение работает. Я хочу просто избежать этого цикла и хочу передать String как «ABC», «DFD», «ss» для «?» .. Возможно ли это – user2902067

1

Мы можем Апите Выбери пакетное решить вашу проблему. Справка:

link

+0

Ссылка только на ответы недействительны :) –

2

В основном поле emp_name не является массивом, но VARCHAR поэтому, когда вы установите значение для него, он должен быть строкой. Таким образом, наличие только 1 ? в запросе представляет одно возможное значение для имени emp_name. Вам нужно будет указать как можно больше ? в качестве длины массива и заменить их индивидуально своими значениями.

Предполагая, что empNames является String[], вы могли бы сделать это, чтобы подготовить запрос:

StringBuilder query = new StringBuilder("Select * from Employee where emp_name in ("); 
for (int i = 0; i < empNames.length; i++) { 
    if (i > 0) { 
    query.append(","); 
    } 
    query.append("?"); 
} 
query.append(")"); 

и это, чтобы установить индивидуальные значения за ?-х:

for (int i = 0; i < empNames.length; i++) { 
    pstmt.setString(i+1, empNames[i]); 
} 
Смежные вопросы