2017-03-26 7 views
0

쿼리를 수동으로 입력하고 복사하여 붙여 넣기하면 정상적으로 실행됩니다. 내가 PreparedStatement 객체에 쿼리를 만들 때 오류가 발생합니다 :선택 쿼리에 대해 Java PreparedStatement를 사용하는 중 SQL 예외 발생

com.ibm.db2.jcc.am.SqlSyntaxErrorException: [jcc][10145][10844][4.22.29] Invalid parameter 1: Parameter index is out of range. ERRORCODE=-4461, SQLSTATE=42815

나는 PreparedStatement의 개체에 대한의 JavaDoc을 읽을 수는 있지만 아이디어 중 신선한 생각했다. 동일하지만 String 대신 int를 사용하는 다른 쿼리는 정상적으로 작동합니다. 이견있는 사람?

코드의 조각 : 아래

 String queryText = ""; 
     PreparedStatement querySt = null; 
     ResultSet answers = null; 


     queryText = "SELECT title, year, language, weight FROM yrb_book WHERE title = '?' AND cat = '?' "; 

     try 
     { 
      querySt = DbConn.prepareStatement(queryText); 
     } 
     catch(SQLException e) 
     { 
      System.out.println(e); 
      System.exit(0); 
     } 

     // Execute the query. 
     try 
     { 
      querySt.setString(1, title); 
      querySt.setString(2, category); 
      answers = querySt.executeQuery(); 
     } 

내가 작업하고있는 테이블 : 나는 30 분 동안이 답변을 공부 create table yrb_book ( title varchar(25) not null, year smallint not null, language varchar(10), cat varchar(10) not null, weight smallint not null, constraint yrb_book_pk primary key (title, year), constraint yrb_book_fk_cat foreign key (cat) references yrb_category, constraint yrb_book_weight check (weight > 0) );

하지만 내 경우에 적용 할 수있는 방법을 볼 수 없습니다 .

답변

3

토큰 "?"에 따옴표 (싱글 및 더블)를 사용하지 마십시오. 대신 :

queryText = "SELECT title, year, language, weight FROM yrb_book WHERE title = '?' AND cat = '?' "; 

사용 : 당신이 따옴표를 필요로하거나 나쁜 DB2 쿼리가됩니다 jplc @

queryText = "SELECT title, year, language, weight FROM yrb_book WHERE title = ? AND cat = ? "; 
+0

. 더 이상이 방법을 시도하고 있습니다 :'string temp = " '"+ title + "'"' – Mike

+0

@Mike는 새로운 쿼리를 실행 했습니까? 자바 SQL API (PreparedStatement)가 당신을 대신 해준다. 새로운 오류가 발생하면 게시하십시오. – jplc

+0

당신이 정확하고 틀렸어. 귀하의 제안은 내 문제를 해결했습니다. 귀하의 제안에 감사드립니다, 정말 고마워! 자바는 실제로'?'를 문자열로 추가 할 때 실제로'''를 추가합니다. 다시 한번 감사드립니다. – Mike