Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

java.sql.SQLException Índice de parâmetro fora do intervalo (1> número de parâmetros, que é 0)


Você receberá este erro quando chamar qualquer um dos setXxx() métodos em PreparedStatement , enquanto a string de consulta SQL não possui espaços reservados ? por esta.

Por exemplo, isso está errado :
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);

Você precisa corrigir a string de consulta SQL de acordo para especificar os espaços reservados.
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);

Observe que o índice do parâmetro começa com 1 e que você não precisa citar esses placeholders assim:
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";

Caso contrário, você ainda receberá a mesma exceção, porque o analisador SQL os interpretará como os valores reais da string e, portanto, não poderá mais encontrar os espaços reservados.

Veja também: