Как использовать arraylist в качестве подготовленного параметра инструкции

Я посмотрел и не смог найти ответ на следующий вызов, который у меня есть. Это кажется довольно простым, но я не смог его решить.

У меня есть ArrayList идентификаторов записи, которые являются типом LongArrayList<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(); 

Приветствуется любая помощь или направление, которое вы можете мне задать.

Спасибо.

Ответ 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(),",") +)");