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.