Некоторые драйверы JDBC могут уже (до JDBC 4) содержать проприетарные расширения, которые поддерживают параметры типа массива в подготовленных выражениях - вам необходимо проконсультироваться с API для этого. Это будет означать, что вы должны использовать и манипулировать массивоподобным типом в SQL.
Одно из возможных решений - использование временных таблиц. Это мета-шаги для такого решения:
- Начать транзакцию (это автоматически, если вы находитесь внутри транзакции
метод - EJB или Spring);
- Использование пакетной вставки JDBC с подготовленным оператором создает и заполняет временную таблицу с произвольными элементами (временная таблица должна иметь область транзакций - это также относится к базам данных, но поддерживается, по крайней мере, Oracle);
- Создайте желаемый SQL, который включает соединение с временной таблицей, для использования значений массива (это может быть явное внутреннее или внешнее JOIN или неявное соединение, например, с использованием EXISTS и т. Д.);
- Фиксация (или откат, если исключение приложения) транзакция (это должно уничтожить временную таблицу; у параллельных транзакций не должно быть конфликта для одного и того же имени временной таблицы).
Пример: выражение IN заменяется на JOIN во временной таблице.