2017-04-04 12 views
-1

私のエラーの解決策を見つけるためにここで検索しましたが、誰も私の問題に一致しません。だから誰でも私のコードでエラーを見つけるのを助けます!?エラー:パラメータインデックスが範囲外です(2>パラメータ数1)

textField_1.addActionListener(new ActionListener() { 
          public void actionPerformed(ActionEvent e) { 

      try{ 
      Object selected = list_1.getSelectedValue(); 
       Connection conn = null; 
       conn=DriverManager.getConnection("jdbc:mysql://localhost/flyer","root","000"); 
       Statement st= conn.createStatement(); 

       String query = "INSERT INTO flyer_item (discount) SELECT price*? FROM `item` where item_name='?' "; 

       // PreparedStatement ps = null; 

       int i = Integer.valueOf((textField_1.getText())); 
       i=i/100; 
       java.sql.PreparedStatement ps = conn.prepareStatement(query); 
       ps.setInt(1,i); 
       ps.setString(2, selected.toString()); 
       ps.executeUpdate(); 
       st.executeUpdate(query); 



      } catch (SQLException se){ 
       System.out.println(se.getMessage()); 

      } 

          } }); 

注:mysql文は、ワークベンチで正常に実行されています。これに

where item_name='?' 

: あなたが

答えて

0

疑問符

変更この周りの単一引用符を削除感謝

where item_name= ? 

問題を解決する必要があること。

一重引用符を使用すると、prepareStatementは、一重引用符が文字列リテラルを囲んでいるとみなしています。文字列リテラルには疑問符が含まれていますが、その疑問符はバインドプレースホルダとして認識されません。

結果として得られるプリペアドステートメントには、プレースホルダが1つしかありません。これは、setStringコールでエラーが発生した理由です。値を指定するための第2のプレースホルダはありません。

-

EDIT

、コードがこの行を削除:

  st.executeUpdate(query); 

また、この行削除:

  Statement st= conn.createStatement(); 

(コードが作成され準備されたステートメントを使用してps

+0

どうもありがとう、私はそれを試してみましたが、エラーがありました:{あなたはあなたのSQL構文でエラーが発生しています。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、正しい構文が近くで使えるようにしてください。 FROM item item_name =? '行1} – sara

+0

エラーは** 'st.executeUpdate(query); **から来ているようです。**あなたはその行を望んでいません。それを取り除く。コードは* prepared statement *(** 'ps' **)を使用しています。 ** st **を定義する必要はありません。 ** 'Statement st =' ** '行も削除してください。 – spencer7593

+0

本当にありがとうございました。それでも私のテーブルではクエリは何もしません。とにかく助けてくれてありがとう。 – sara

0

2番目のパラメータから引用符を削除します。引用符の中に?リテラルとして扱われ、パラメーターとしては扱われません。

String query = "INSERT INTO flyer_item (discount) SELECT price*? FROM `item` where item_name=?"; 

型変換がautonatically扱われます。..

+0

ありがとう、私はそれを試みましたが、エラーがあります:{あなたはあなたのSQL構文に誤りがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、正しい構文が近くで使えるようにしてください。 FROM item item_name =? ' 1行目} – sara

関連する問題