PreparedStatement не работает для Sybase IQ в Java - PullRequest
2 голосов
/ 28 мая 2019

Я и моя команда столкнулись с проблемой.Мы пытаемся извлечь некоторые данные из базы данных Sybase IQ и используем условие where для фильтрации и получения определенных данных.

SQL протестирован и работает нормально, но не работает при использовании Prepared Statement.

Выполнено тестов :

  1. Если мы запустим запрос (с параметрами предложения where или без), он будет работать нормально.
  2. Если мы запустим запросс параметрами, жестко закодированными в подготовленном операторе, он также работает нормально.
  3. Если мы устанавливаем параметры подготовленного оператора программно, он не работает.

Вышеуказанные тесты подтверждают JDBCсоединение работает нормально.

Та же ошибка появляется при использовании PreparedStatement, JdbcTemplate или NamedParameterJdbcTemplate, поэтому я подозреваю, что между PreparedStatement и Sybase IQ может быть проблема.

Может ли кто-нибудь помочь расследовать это?Мы нашли обходной путь для этого, но было бы очень полезно узнать, почему это не работает.

Я нашел очень похожую ветку ( Как мне выполнить PreparedStatement (select object_id ()) в sybase iq? ) по той же проблеме, но никто не дал там принятого и правильного ответа, поэтомуЯ решил создать для этого новый вопрос.

Используемый код:

Class.forName("com.sybase.jdbc4.jdbc.SybDriver");

PreparedStatement stmt = con.prepareStatement("select * from myView where off = ? and acc = ?");

stmt.setString(1, "260");
stmt.setString(2, "9050V");
ResultSet set = stmt.executeQuery();

Сообщение об ошибке:

Exception in thread "main" java.sql.SQLException: JZ0SA: Prepared Statement: Input parameter not set, index: 0.
    at com.sybase.jdbc4.jdbc.SybConnection.getAllExceptions(Unknown Source)
    at com.sybase.jdbc4.jdbc.SybStatement.handleSQLE(Unknown Source)
    at com.sybase.jdbc4.jdbc.SybStatement.sendQuery(Unknown Source)
    at com.sybase.jdbc4.jdbc.SybPreparedStatement.sendQuery(Unknown Source)
    at com.sybase.jdbc4.jdbc.SybStatement.executeQuery(Unknown Source)
    at com.sybase.jdbc4.jdbc.SybPreparedStatement.executeQuery(Unknown Source)

Используемый драйвер JDBC (зависимость Maven):

<dependency>
            <groupId>com.sybase</groupId>
            <artifactId>jconn4</artifactId>
            <version>7.0</version>
</dependency>

1 Ответ

0 голосов
/ 30 мая 2019

stmt.setString (1, "260");stmt.setString (2, "9050V");

Индекс массива начинается с 0 нет?Разве это не индексирование на основе нуля в используемом вами API?

...