Anda akan mendapatkan kesalahan ini saat Anda memanggil salah satu setXxx()
metode pada PreparedStatement
, sedangkan string kueri SQL tidak memiliki tempat penampung ?
untuk ini.
Misalnya ini salah :
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);
Anda perlu memperbaiki string kueri SQL yang sesuai untuk menentukan placeholder.
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);
Perhatikan indeks parameter dimulai dengan 1
dan Anda tidak perlu mengutip placeholder tersebut seperti ini:
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";
Jika tidak, Anda masih akan mendapatkan pengecualian yang sama, karena pengurai SQL kemudian akan menafsirkannya sebagai nilai string yang sebenarnya dan dengan demikian tidak dapat menemukan placeholder lagi.