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

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

у меня есть ArrayList из идентификаторов записей, которые являются типом Long -> ArrayList<Long>, Я хотел бы использовать этот список идентификаторов записей, чтобы выбрать строки из другой таблицы. Все идет нормально. Теперь на вызов...

а) Я использую подготовленное заявление, чтобы выбрать данные из таблицы, используя ArrayList как вход для этого.

selectPS = dbConnection.prepareStatement("select columnA from tableA where id in ?");

Вопрос по вышесказанному - как определить параметр? Вышеупомянутое не кажется правильным для ArrayList параметр типа.

б) Я также сталкиваюсь с проблемами при установке значения параметра для подготовленного утверждения. Нет способа установить ArrayList введите значение, и я не вижу других жизнеспособных вариантов.

---> selectPS.set?????(1, arraylistParameter);
     ResultSet rs = selectPS.executeQuery(); 

Любая помощь или направление, в котором вы можете меня найти, очень ценится.

Спасибо.

4 ответа

Решение

Вы можете использовать setArray метод, как упомянуто в javadoc ниже:

http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html

Образец кода:

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

Если у вас есть 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();

@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' будет строковым параметром с каждым элементом в одинарных кавычках и через запятую.

Зачем усложнять жизнь

PreparedStatement pstmt = conn.prepareStatement("select * from employee where id in ("+ StringUtils.join(arraylistParameter.iterator(),",") +)");
Другие вопросы по тегам