java.sql.SQLException Índice de parámetros fuera de rango (1> número de parámetros, que es 0) [cerrado]

Resuelto DeveloperJava asked hace 12 años • 2 respuestas

Después de la validación del cuadro combinado de selección que he seleccionado y no puedo insertarlo en mi base de datos. Tomcat da el siguiente error:

java.sql.SQLException: índice de parámetros fuera de rango (1 > número de parámetros, que es 0).

¿Cómo se produce esto y cómo puedo solucionarlo?

DeveloperJava avatar Jun 05 '12 18:06 DeveloperJava
Aceptado

Recibirá este error cuando llame a cualquiera de los setXxx()métodos en PreparedStatement, mientras que la cadena de consulta SQL no tiene ningún marcador de posición ?para esto.

Por ejemplo esto está mal :

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 1y que no es necesario citar esos marcadores de posición de esta manera:

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

De lo contrario, seguirá obteniendo la misma excepción, porque el analizador SQL los interpretará como valores de cadena reales y, por lo tanto, ya no podrá encontrar los marcadores de posición.

Ver también:

  • Tutorial de JDBC: declaraciones preparadas
BalusC avatar Jun 05 '2012 13:06 BalusC

Este es un problema con la versión del controlador jdbc. Tuve este problema cuando usaba mysql-connector-java-commercial-5.0.3-bin.jar pero cuando cambié a una versión posterior del controlador mysql-connector-java-5.1.22.jar, el problema se solucionó.

Ben Sang avatar Oct 19 '2012 06:10 Ben Sang