Как использовать массив в качестве подготовленного параметра оператора
Я посмотрел и не смог найти ответ на следующую проблему, с которой я столкнулся. Это кажется довольно простым, но я не смог решить его.
у меня есть 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(),",") +)");