U krijgt deze foutmelding wanneer u een van de setXxx()
. aanroept methoden op PreparedStatement
, terwijl de SQL-querystring geen tijdelijke aanduidingen heeft ?
hiervoor.
Dit is bijvoorbeeld fout :
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);
U moet de SQL-queryreeks dienovereenkomstig aanpassen om de tijdelijke aanduidingen te specificeren.
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);
Merk op dat de parameterindex begint met 1
en dat je niet doet moet die tijdelijke aanduidingen als volgt citeren:
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";
Anders krijg je nog steeds dezelfde uitzondering, omdat de SQL-parser ze dan interpreteert als de werkelijke tekenreekswaarden en dus de tijdelijke aanduidingen niet meer kan vinden.