Предложение IN в PreparedStatement

1

Я использую ojdbc6 jar, и я хочу использовать предложение In в PreparedStatement.

Я использовал метод createArrayOf(String,ArrayOfString) объекта соединения.

У меня возникла ошибка как функция Unsupported

Я проверил класс PhysicalConnection в реализации для этого метода.

public Array createArrayOf(String s, Object aobj[]) throws SQLException {
        SQLException sqlexception = DatabaseError.createUnsupportedFeatureSqlException();
        sqlexception.fillInStackTrace();
        throw sqlexception;
    }

Я проверил ojdbc14.jar для этого метода. В этом файле.jar этот метод не определен.

Пожалуйста, помогите мне, какую банку я должен использовать? Я хочу реализовать функциональность предложения In в PreparedStatement.

  • 1
    Пожалуйста, оставьте сообщение об ошибке. Кроме того, к какой версии Oracle вы подключаетесь? Какую строку SQL вы используете в PreparedStatement? Пожалуйста, включите больше информации
  • 0
    Кроме того, почему бы вам просто не сказать «AND some_value IN ('value1', 'value2')" прямо в SQL для PreparedStatement?
Показать ещё 16 комментариев
Теги:
jdbc

1 ответ

0

Поэтому вы хотите сделать что-то вроде...

SELECT * FROM TAB WHERE ID IN ?

У меня была аналогичная проблема в прошлом и я пробовал всевозможные трюки с JDBC и Oracle (такие как пользовательские типы и т.д.), Но это то, что мы закончили с...

  1. Создайте глобальную временную таблицу, содержащую один столбец идентификатора (в скобках для сеанса - ВКЛ. КОМИТЕТ УДАЛИТЬ)

  2. Начать транзакцию

  3. Вставьте все идентификаторы, которые вы хотите, используя оператор партии в таблицу temp

  4. Присоединитесь к этой таблице, чтобы получить результаты, например...

    SELECT * FROM TAB T INNER JOIN MyTempTable X ON T.ID = X.ID

  5. Когда вы совершаете фиксацию, таблица temp усечена

Если вам нужно сделать несколько из них в одной транзакции, сначала удалите форму temp-таблицы.

(Кроме того, у нас было множество проблем с версиями драйверов и такими вещами, как setArray и т.д., Поэтому мы остановились на этом)

  • 0
    У меня есть только права на чтение БД.
  • 0
    @ user2343420 это боль !! Если вам приходится прибегать к «динамическому» sql, помните, что некоторые СУБД (например, Oracle) поддерживают только 1000 элементов в предложении IN. Вы всегда можете подготовить 1000 заявлений, и если у вас есть более 1000 вещей, сделать их в нескольких партиях ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню