Java - подготовленные операторы и массивы - PullRequest
1 голос
/ 29 августа 2009

Как я могу обработать массив в подготовленном выражении? т.е. я хочу сделать запрос, и один из параметров, которые я получаю, - это массив строк, которые я хочу использовать в запросе (не выбирать строки, в которых есть поле, находящееся в массиве)?

Ответы [ 3 ]

1 голос
/ 29 августа 2009

Некоторые драйверы JDBC могут уже (до JDBC 4) содержать проприетарные расширения, которые поддерживают параметры типа массива в подготовленных выражениях - вам необходимо проконсультироваться с API для этого. Это будет означать, что вы должны использовать и манипулировать массивоподобным типом в SQL.

Одно из возможных решений - использование временных таблиц. Это мета-шаги для такого решения:

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

Пример: выражение IN заменяется на JOIN во временной таблице.

1 голос
/ 29 августа 2009

Это в значительной степени зависит от используемой СУБД. Часто такая функциональность может быть реализована с помощью расширений драйвера jdbc производителя.

2 варианта, которые я нашел (для Oracle): http://blogs.itemis.de/kloss/2009/03/05/arrays-preparedstatements-jdbc-and-oracle/

http://www.angelfire.com/home/jasonvogel/java_jdbc_arrays.html

Попробуй посмотреть, поможет ли это тебе.

1 голос
/ 29 августа 2009

Возможно, это вам сейчас не поможет, но я читал, что JDBC 4 будет поддерживать типы массивов, как это определено в версии SQL 2003 года.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...