sql >> Database >  >> RDS >> Mysql

java.sql.SQLException Parameterindex buiten bereik (1> aantal parameters, dat is 0)

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.

Zie ook:



  1. wat is de ontsnappingsreeks voor koppelteken (-) in PostgreSQL

  2. Sluit me aan bij Special Guest Michal Bar van het MS Access-team!

  3. Hoe kan ik drie tabel JOIN's doen in een UPDATE-query?

  4. Oracle SQL PIVOT-tabel