2011-08-11 16 views
1

準備済みのステートメントにはinvalid column indexが表示されます。
は、ここに私のコードPrepareステートメントで無効な列インデックスエラー

  // Excluding some unnecessary code 
     counter = 1; 
     if (rsTableNames.next()) 
     { 
      // Creating Query for prepared statement 
      String getCode = "select * from (select c_name from " 
        + rsTableNames.getString(1)+ " where lower(c_name) like ?%'"; 
      while (rsTableNames.next()) 
      { 
       getCode += " union select c_name from " + 
       rsTableNames.getString(1)+ " where lower(c_name) like ?%'"; 
       counter++; 
      } 
      getCode += ") where rownum <= " + maxRecords; 
       // Now The getCode contains 3 place holders ie ?   
      pst = con.prepareStatement(getCode); 
      String param = "'" + query.toLowerCase(); 

      for(int i=1;i<=counter;i++) 
      { 
       pst.setString(i,param); // when i=3 exception is thrown 
      } 
    } 

クエリは3つのプレースホルダが含まれているもののi3になったとき、私は例外を取得しています。
EDIT(HINT):私は問題が'の混乱を招いていると思います。どうすればそれを逃れることができますか?

〜アジンカ。

答えて

6

私はそれが問題の原因であるかどうかはわかりませんが、私はパラメータがクォートになると思います。 のコードには、それぞれのパラメータの後に、パラメータの先頭に引用符が追加されています。私はあなただけしたい疑う:それぞれの場所で

rsTableNames.getString(1)+ " where lower(c_name) like ?"; 

、そして:

String param = query.toLowerCase() + "%"; 

それは、引用の解析のために、この問題を解決することが可能です - 私はあなたの中間のパラメータがあるとみなされていると思います大きな部分の一部リテラル

+0

感謝を必ず各近いがあることを確認してください。私はそれを試みたが、それはエラーを削除したが、間違ったクエリを作成します。私は '' 'が' like'節に必要であると思います。私は '' 'を避けなければならないと思うが、どうすればよいか分からない。 – xyz

+0

@Ajinkya「間違ったクエリ」とはどういう意味ですか?あなたが得ようとしているものと結果について何を得ているのかの例を挙げてください。 –

+0

@John: '.. where like query%'(これは必須の 'like'節から' ''を削除します)を使ってクエリを作成しますので、データベースにいくつかのレコードがあるので結果はゼロになります。 '.. like like 'query%''と似ています。 – xyz

0

3つありますか? SQLでは? forループ内のpreparedStatement全体を印刷してみてください。

あなたがここにいる多くのループは期待どおりに機能していない可能性があり、最終的にpreparedStatementには2つのパラメータしかないと思われます。

例外はスローされましたか? Java APIから: 例外: SQLException - parameterIndexがSQLステートメントのパラメーターマーカーに対応していない場合。データベースアクセスエラーが発生した場合、またはこのメソッドがクローズされたPreparedStatementも

に呼び出された場合は、詐欺の接続、およびcon.preparedStatementインスタンスを共有する場合、提案のための適切

+0

すべてが整っています。問題は ''である。 – xyz

関連する問題