Mysql
 sql >> Baza danych >  >> RDS >> Mysql

java.sql.SQLException Indeks parametru poza zakresem (1> liczba parametrów, czyli 0)

Otrzymasz ten błąd, gdy wywołasz dowolną z funkcji setXxx() metody na PreparedStatement , podczas gdy ciąg zapytania SQL nie zawiera żadnych symboli zastępczych ? w tym celu.

Na przykład jest to niewłaściwe :

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);

Musisz odpowiednio poprawić ciąg zapytania SQL, aby określić symbole zastępcze.

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);

Zauważ, że indeks parametru zaczyna się od 1 i że nie trzeba zacytować te symbole zastępcze w następujący sposób:

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";

W przeciwnym razie nadal otrzymasz ten sam wyjątek, ponieważ parser SQL zinterpretuje je jako rzeczywiste wartości ciągów i dlatego nie będzie już mógł znaleźć symboli zastępczych.

Zobacz też:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyświetlić sortowanie bazy danych w MySQL

  2. Błąd migracji Laravel:błąd składni lub naruszenie dostępu:1071 Podany klucz był za długi; maksymalna długość klucza to 767 bajtów

  3. Jak zastosować metodę bindValue w klauzuli LIMIT?

  4. Użycie aliasu kolumny w klauzuli WHERE zapytania MySQL powoduje błąd

  5. Typ danych ENUM (wyliczenie) w MySQL:12 najważniejszych faktów i przydatnych wskazówek