sql >> Databasteknik >  >> RDS >> Mysql

java.sql.SQLException Parameterindex utanför intervallet (1> antal parametrar, vilket är 0)

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.

Se även:



  1. Jämföra databasproxyfeltider - ProxySQL, MaxScale och HAProxy

  2. Ansluter till Oracle 12c Database från Pentaho Data Integration (Kettle) Community Edition

  3. MySQL primära nycklar

  4. Får du använda siffror som tabellnamn i MySQL?