Du får denne fejl, når du kalder nogen af setXxx()
metoder på PreparedStatement
, mens SQL-forespørgselsstrengen ikke har nogen pladsholdere ?
for dette.
For eksempel er dette forkert :
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 skal rette SQL-forespørgselsstrengen i overensstemmelse hermed for at angive pladsholderne.
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);
Bemærk, at parameterindekset starter med 1
og at du ikke gør det nødt til at citere disse pladsholdere som sådan:
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";
Ellers vil du stadig få den samme undtagelse, fordi SQL-parseren så fortolker dem som de faktiske strengværdier og kan dermed ikke finde pladsholderne længere.