>source

나와 우리 팀은 문제에 직면했다. Sybase IQ 데이터베이스에서 일부 데이터를 검색하려고 시도 중이며 where 를 사용 중입니다.  특정 데이터를 필터링하고 가져 오는 절입니다.

SQL이 테스트되어 제대로 작동하지만 Prepared Statement를 사용할 때 실패합니다.

테스트 완료:

  1. where 절 매개 변수가 있거나없는 쿼리를 실행하면 제대로 작동합니다.
  2. Prepared Statement에 하드 코딩 된 매개 변수를 사용하여 쿼리를 실행하면 정상적으로 작동합니다.
  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

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

    배열 인덱스는 0으로 시작합니까? 사용하는 API에서 0 기반 색인이 아니십니까?

  • 이전 ios - 가우시안 블러 효과를 그리는 방법?
  • 다음 angular - json에서 API로 얻은 필드 필드에 Ag 그리드의 행 데이터를 매핑하는 방법은 무엇입니까?