Представьте, что у меня есть 100 запросов SELECT, которые отличаются одним вводом. Для значения можно использовать PreparedStatement.
Вся документация, которую я вижу в Интернете, предназначена для пакетной вставки / обновления / удаления. Я никогда не видел пакетов, используемых для операторов выбора.
Можно ли это сделать? Если да, пожалуйста, помогите мне, когда приведен ниже образец кода.
Я полагаю, что это можно сделать с помощью предложения IN, но я бы предпочел использовать операторы пакетного выбора.
Пример кода:
public void run(Connection db_conn, List value_list) { String sql = "SELECT * FROM DATA_TABLE WHERE ATTR = ?"; PreparedStatement pstmt = db_conn.prepareStatement(sql); for (String value: value_list) { pstmt.clearParameters(); pstmt.setObject(1, value); pstmt.addBatch(); } // What do I call here? int[] result_array = pstmt.executeBatch() while (pstmt.getMoreResults()) { ResultSet result_set = pstmt.getResultSet(); // do work here } }
Я полагаю, это также может зависеть от драйвера. Я пишу запросы к базе данных IBM AS / 400 DB2, используя их драйвер JDBC.
См. Учебное пособие по Java :
Этот список может содержать инструкции для обновления, вставки или удаления строки; и он также может содержать операторы DDL, такие как CREATE TABLE и DROP TABLE. Однако он не может содержать инструкцию, которая создаст объект ResultSet, например инструкцию SELECT. Другими словами, список может содержать только операторы, которые производят счетчик обновлений.
Список, связанный с объектом Statement при его создании, изначально пуст. Вы можете добавить команды SQL в этот список с помощью метода addBatch.
AddBatch () предназначен для операторов «delete» / «insert» / «update», а не для операторов «select».