Как использовать arraylist в качестве подготовленного параметра инструкции
Я посмотрел и не смог найти ответ на следующий вызов, который у меня есть. Это
кажется довольно простым, но я не смог его решить.
У меня есть ArrayList
идентификаторов записи, которые являются типом Long
→ ArrayList<Long>
. Я хотел бы использовать
этот список идентификаторов записей для выбора строк из другой таблицы. Все идет нормально. Теперь на
вызов...
a) Я использую подготовленный оператор для выбора данных из таблицы с помощью ArrayList
в качестве входных данных для этого.
selectPS = dbConnection.prepareStatement("select columnA from tableA where id in ?");
Вопрос о выше - как определить параметр? Вышеприведенное не кажется правильным для a ArrayList
.
b) Я также сталкиваюсь с проблемами при настройке значения параметра для подготовленного выражение. Нет способа установить значение типа ArrayList
, и я не вижу других жизнеспособных варианты.
---> selectPS.set?????(1, arraylistParameter);
ResultSet rs = selectPS.executeQuery();
Приветствуется любая помощь или направление, которое вы можете мне задать.
Спасибо.
Ответы
Ответ 1
Вы можете использовать метод setArray
, как указано в javadoc ниже:
http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#setArray (int, java.sql.Array)
Пример кода:
PreparedStatement pstmt =
conn.prepareStatement("select * from employee where id in (?)");
Array array = conn.createArrayOf("VARCHAR", new Object[]{"1", "2","3"});
pstmt.setArray(1, array);
ResultSet rs = pstmt.executeQuery();
Ответ 2
Если у вас ArrayList, то преобразуйтесь в Array [Object]
ArrayList<String> list = new ArrayList<String>();
PreparedStatement pstmt =
conn.prepareStatement("select * from employee where id in (?)");
Array array = conn.createArrayOf("VARCHAR", list.toArray());
pstmt.setArray(1, array);
ResultSet rs = pstmt.executeQuery();
Ответ 3
@JulienD
Лучший способ состоит в том, чтобы разбить процесс на два этапа.
Шаг 1:
Давайте скажем 'rawList' как ваш список, который вы хотите добавить как параметры в подготовленный оператор.
Создайте еще один список:
ArrayList<String> listWithQuotes = new ArrayList<String>();
for(String element : rawList){
listWithQuotes.add("'"+element+"'");
}
Шаг 2:
Разделите "listWithQuotes" запятыми.
String finalString = StringUtils.join(listWithQuotes.iterator(),",");
'finalString' будет строковыми параметрами с каждым элементом как одинарные кавычки и запятыми.
Ответ 4
зачем делать жизнь hard-
PreparedStatement pstmt = conn.prepareStatement("select * from employee where id in ("+ StringUtils.join(arraylistParameter.iterator(),",") +)");