Du kommer att få detta fel när du anropar någon av setXxx()
metoder på PreparedStatement
, medan SQL-frågesträngen inte har några platshållare ?
för detta.
Detta är till exempel fel :
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);
Du måste fixa SQL-frågesträngen för att ange platshållarna.
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);
Observera att parameterindexet börjar med 1
och att du inte gör det måste citera dessa platshållare som så:
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";
Annars kommer du fortfarande att få samma undantag, eftersom SQL-parsern då tolkar dem som de faktiska strängvärdena och kan därmed inte hitta platshållarna längre.