私はすでにstackoverflowの、インターネットの他の部分を探索したが見つけるcouldntのJavaとSQLのprepareStatementエラー(範囲外のパラメータインデックス)
java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
を投げる私のコードの一部を修正しようとしてきました解決策は、エラーを修正しました。
これは、クラスファイルの先頭である:
PreparedStatement stmt;
そして、これが私の建設業者である:
public DataAccessObjectImpl() throws Exception {
this.conn = new DBConnector();
}
これは、メソッドのthatsですが、問題を引き起こす:
@Override
public boolean addAlbum(int UID, String artist, String album) {
String sql = "";
try {
stmt = conn.getConnection().prepareStatement("INSERT INTO music (identifier, UID, artist, album) VALUES (?,?,?,?);");
stmt.setString(1, getNewIdentifier());
stmt.setInt(2, UID);
stmt.setString(3, artist);
stmt.setString(4, album);
stmt.executeUpdate();
} catch (Exception ex) {
System.out.println("nugget 1 : " + ex);
} finally {
try {
if (stmt != null) {
stmt.close();
return true;
}
} catch (Exception e) {
System.out.println("Nugget 2 : " + e);
}
}
return false;
}
( 「ナゲット」という言葉は、ログ/コンソールで自分自身にとって簡単に見つけることができる)
私はstackoverflowに集めることができたから、おそらく私の疑問符はthats問題ですが、私はどのように把握することができないようです。同じクラスでうまく動作している他のメソッドに対しては、prepareStatementを使用しました。
私は以下のダウン提供されるいくつかの作業コードを持って、私はSQLインジェクションにパッチを適用するのprepareStatementでこのコードを置き換えたい:
try {
stmtb = conn.getConnection().createStatement();
sql = "INSERT INTO music VALUES ('" + getNewIdentifier() + "','" + UID + "','" + artist + "','" + album + "')";
} catch (SQLException ex) {
}
try {
stmt.executeUpdate(sql);
return true;
} catch (Exception e) {
System.out.println(e);
}
return false;
は、高度にありがとうございます!
この行を変更することにより、固定:
stmt = conn.getConnection().prepareStatement("INSERT INTO music (identifier, UID, artist, album) VALUES (?,?,?,?);");
と私はこれにそれを変更:
PreparedStatement stmt = conn.getConnection().prepareStatement("SELECT * FROM user WHERE username = (?);");
と、この行を削除:
PreparedStatement stmt;
がためにあなたにKayamanありがとう手伝い!
例外を表示するときに 'e.printStackTrace();'を使用します。例外の発生した行など、より多くの情報を取得できます。 – Kayaman
あなたが実行していると思うクエリを実行していないと確信しています。 – Kayaman
拡張検索のKayamanありがとうございました。私は "stmt.setInt(2、UID);"にある問題を発見しました。私はまだ問題を解決する解決策を見つけられませんでしたが。 – DavidCarl