setXxx()
のいずれかを呼び出すと、このエラーが発生します PreparedStatement
のメソッド 、SQLクエリ文字列にはプレースホルダーがありません?
このために。
たとえば、これは間違っています :
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (val1, val2, val3)";
// ...
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, val1); // Fail.
preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);
プレースホルダーを指定するには、それに応じてSQLクエリ文字列を修正する必要があります。
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (?, ?, ?)";
// ...
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, val1);
preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);
パラメータインデックスは1
で始まることに注意してください そして、あなたはしない そのようにそれらのプレースホルダーを引用する必要があります:
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";
そうしないと、SQLパーサーがそれらを実際の文字列値として解釈し、プレースホルダーを見つけることができなくなるため、同じ例外が発生します。