Obtendrá este error cuando llame a cualquiera de los setXxx()
métodos en PreparedStatement
, mientras que la cadena de consulta SQL no tiene marcadores de posición ?
por esto.
Por ejemplo, esto es incorrecto :
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);
Debe corregir la cadena de consulta SQL en consecuencia para especificar los marcadores de posición.
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);
Tenga en cuenta que el índice de parámetros comienza con 1
y que tu no necesito citar esos marcadores de posición así:
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";
De lo contrario, obtendrá la misma excepción, porque el analizador SQL los interpretará como los valores de cadena reales y, por lo tanto, ya no podrá encontrar los marcadores de posición.