sql >> Databáze >  >> RDS >> Mysql

java.sql.SQLException Index parametru je mimo rozsah (1> počet parametrů, což je 0)

Tato chyba se zobrazí, když zavoláte kteroukoli z setXxx() metody na PreparedStatement , zatímco řetězec dotazu SQL nemá žádné zástupné symboly ? za to.

Toto je například špatně :

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

Chcete-li určit zástupné symboly, musíte odpovídajícím způsobem opravit řetězec dotazu SQL.

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

Všimněte si, že index parametru začíná 1 a že to neděláte je třeba tyto zástupné symboly citovat takto:

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

V opačném případě budete stále dostávat stejnou výjimku, protože analyzátor SQL je pak bude interpretovat jako skutečné hodnoty řetězce, a proto již nemůže najít zástupné symboly.

Viz také:



  1. Jak zobrazit datum v jiném formátu v oracle

  2. PG::InvalidParameterValue:ERROR:neplatná hodnota parametru client_min_messages:panic

  3. Jak uložit adresářovou/hierarchii/stromovou strukturu do databáze?

  4. Může PostgreSQL indexovat sloupce pole?