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.