2017-03-26 10 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は新しいクエリを実行しましたか? Java SQL API(PreparedStatement)があなたのために働きます。新しいエラーが発生した場合は、それを投稿してください。 – jplc

+0

あなたは正しいと私は間違っていた。あなたの提案は私の問題を解決しました。あなたの提案をありがとう、私は本当にそれを感謝します! Javaでは '? 'を単独で置き換えるときに' ''を文字列に追加します。再度、感謝します。 – Mike

関連する問題