Error: Falta el parámetro IN o OUT en el índice: 1
Estoy ejecutando una sentencia de inserción de datos desde Java a Oracle pero me aparece el error: Falta el parámetro IN o OUT en el índice:: 1...
¿Alguna solución o algo que me puedas ayudar?
¿Alguna solución o algo que me puedas ayudar?
1 respuesta
Respuesta
1
1
Anónimo
Tienes que setearle el parámetro a la sentencia, eso es porque el sql esta enviando una sentencia que recibe parámetros, ya sea un procedimiento o un sql sencillo. Revisa como setear parámetros en el preparedStatement
Hola...
Ya esta seteado todo... es más... lo tengo separado por archivos DAO y DTO en donde los DTO tengo los set y los get y los DAO es donde indico los procesos es decir ingresarDatos... las sentencias SQL las manejo a través de un archivo .properties en los cuales simplemente pongo la sentencia y al final en donde va cada valor pongo "?" para que tome los valores que se envían desde el jsp.
El error que aparece en consola es:
java.sql.SQLException: Falta el parámetro IN o OUT en el índice:: 1
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:1681)
y cuando clickeo en el primer error aparece.
Class file Editor
Source not found
The jar file ojdbc14.jar has no source attachment.
Aparece un boton que dice "Attach source" y a continuacion mas informacion del error....
¿Me puedes ayudar?
Ya esta seteado todo... es más... lo tengo separado por archivos DAO y DTO en donde los DTO tengo los set y los get y los DAO es donde indico los procesos es decir ingresarDatos... las sentencias SQL las manejo a través de un archivo .properties en los cuales simplemente pongo la sentencia y al final en donde va cada valor pongo "?" para que tome los valores que se envían desde el jsp.
El error que aparece en consola es:
java.sql.SQLException: Falta el parámetro IN o OUT en el índice:: 1
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:1681)
y cuando clickeo en el primer error aparece.
Class file Editor
Source not found
The jar file ojdbc14.jar has no source attachment.
Aparece un boton que dice "Attach source" y a continuacion mas informacion del error....
¿Me puedes ayudar?
Puede ser que estas seteando un valor y se esta yendo null.
Como podría verificar esto... si tengo y he confirmado todos los campos y la información que esta incluida en los DAO y los DTO, pero no se como verificar lo que se envía.
Probé con debug pero no se como ver la información que contiene...
Alguna idea que me pueda ayudar...
DE antemano mil gracias por la ayuda que me has prestado!
Probé con debug pero no se como ver la información que contiene...
Alguna idea que me pueda ayudar...
DE antemano mil gracias por la ayuda que me has prestado!
Pásame el proyecto y lo revisaré
[email protected]
[email protected]
De nuevo mil gracias !
Ahí te envié una parte del proyecto... Pero completa...
Revísalo y estaré muy pendiente.
2000 gracias!
Ahí te envié una parte del proyecto... Pero completa...
Revísalo y estaré muy pendiente.
2000 gracias!
Revisa los parámetros
Por ejemplo en esta sentencia:
actualizarEmpresa update simon_empresa_emp set id_empresa\= ?, str_tipo_emp\= ?, str_razonsocial_emp\= ?, str_replegal_emp\= ?, str_direccion_emp\= ?, num_telefono_emp\= ?, str_fechainscripcion_emp\= ?, str_email_emp\= ?, num_celular_emp\= ?, num_multas_emp\= ?, str_ubicacion_emp\= ?, str_accion_emp\= ?, str_estado_emp\= ?
Primero que te falta el where porque sino vas a actualizar todos los registros y segundo que donde lo mandas a llamar le seteas solamente 9 parámetros y en realidad el espera 13
Revisa que todos los demás estén bien.
Por ejemplo en esta sentencia:
actualizarEmpresa update simon_empresa_emp set id_empresa\= ?, str_tipo_emp\= ?, str_razonsocial_emp\= ?, str_replegal_emp\= ?, str_direccion_emp\= ?, num_telefono_emp\= ?, str_fechainscripcion_emp\= ?, str_email_emp\= ?, num_celular_emp\= ?, num_multas_emp\= ?, str_ubicacion_emp\= ?, str_accion_emp\= ?, str_estado_emp\= ?
Primero que te falta el where porque sino vas a actualizar todos los registros y segundo que donde lo mandas a llamar le seteas solamente 9 parámetros y en realidad el espera 13
Revisa que todos los demás estén bien.
Hola...
Gracias por la revisión y la respuesta.
Lo que pasa con las sentencias de actualización es que no las he realizado ni revisado completamente ya que el inconveniente que tengo es con la inserción de datos nuevos... entonces si no me ha funcionado eso, preferí enfocarme en la solución de esto antes de seguir.
¿Pregunto... La inserción de datos esta bien o al menos el proceso? Que es allí donde genera el problema... no se si es con el driver o que... ya que ese fue el 1 inconveniente que tuve, luego de solucionarlo me continua apareciendo el error que te indique al comienzo.
Gracias por la atención que me has prestado y la ayuda sobre todo...!
Gracias por la revisión y la respuesta.
Lo que pasa con las sentencias de actualización es que no las he realizado ni revisado completamente ya que el inconveniente que tengo es con la inserción de datos nuevos... entonces si no me ha funcionado eso, preferí enfocarme en la solución de esto antes de seguir.
¿Pregunto... La inserción de datos esta bien o al menos el proceso? Que es allí donde genera el problema... no se si es con el driver o que... ya que ese fue el 1 inconveniente que tuve, luego de solucionarlo me continua apareciendo el error que te indique al comienzo.
Gracias por la atención que me has prestado y la ayuda sobre todo...!
Este error, no lo vi en la primera revisión pero aquí esta el detalle
ps = conexion.prepareStatement(conexion.getStatement("insertarProyecto"));
rs = ps.executeQuery();
/* Se asignan los valores de los parámetros asociados al proyecto
* que se va a agregar.*/
//ps.setInt(1, proyecto.getId_proyecto());
ps.setString(1, proyecto.getStr_nombre_pro());
ps.setString(2, proyecto.getStr_direccion_pro());
ps.setInt(3, proyecto.getNum_atc_pro());
ps.setInt(4, proyecto.getNum_atlo_pro());
ps.setString(5, proyecto.getStr_tratamiento_pro());
ps.setString(6, proyecto.getStr_crt_pro());
ps.setString(7, proyecto.getStr_poligono_pro());
ps.setInt(8, proyecto.getFk_constructor());
ps.setInt(9, proyecto.getFk_enajenador());
En la primer linea carga el statement con el sql que espera los parámetros, en la segunda linea ejecuta ese script, y nunca le ha seteado los parámetros.
Existen tres forma de ejecutar secuencias sql con el preparedStatement:
1. Pues.execute(); //Ejecuta la sentencia y retorna true en caso de que la consulta retorne parámetros.
2. Pues.executeQuery(); //Ejecuta la sentencia y retorna el conjunto de registros obtenidos por la consulta
3. Pues.executeUpdate(); //Ejecuta la sentencia y retorna el numero de registros afectados al ejecutar la misma, se utiliza mayormente en actualizaciones, inserciones o borrados.
En tu caso executas la sentencia justo después de preparar el objeto y tienes que setearle los parámetros.
Tienes que cambiarlo por el siguiente:
ps = conexion.prepareStatement(conexion.getStatement("insertarProyecto"));
/* Se asignan los valores de los parámetros asociados al proyecto
* que se va a agregar.*/
//ps.setInt(1, proyecto.getId_proyecto());
ps.setString(1, proyecto.getStr_nombre_pro());
ps.setString(2, proyecto.getStr_direccion_pro());
ps.setInt(3, proyecto.getNum_atc_pro());
ps.setInt(4, proyecto.getNum_atlo_pro());
ps.setString(5, proyecto.getStr_tratamiento_pro());
ps.setString(6, proyecto.getStr_crt_pro());
ps.setString(7, proyecto.getStr_poligono_pro());
ps.setInt(8, proyecto.getFk_constructor());
ps.setInt(9, proyecto.getFk_enajenador());
/*Se ejecuta la sentencia SQL*/
ps.execute();
ps = conexion.prepareStatement(conexion.getStatement("insertarProyecto"));
rs = ps.executeQuery();
/* Se asignan los valores de los parámetros asociados al proyecto
* que se va a agregar.*/
//ps.setInt(1, proyecto.getId_proyecto());
ps.setString(1, proyecto.getStr_nombre_pro());
ps.setString(2, proyecto.getStr_direccion_pro());
ps.setInt(3, proyecto.getNum_atc_pro());
ps.setInt(4, proyecto.getNum_atlo_pro());
ps.setString(5, proyecto.getStr_tratamiento_pro());
ps.setString(6, proyecto.getStr_crt_pro());
ps.setString(7, proyecto.getStr_poligono_pro());
ps.setInt(8, proyecto.getFk_constructor());
ps.setInt(9, proyecto.getFk_enajenador());
En la primer linea carga el statement con el sql que espera los parámetros, en la segunda linea ejecuta ese script, y nunca le ha seteado los parámetros.
Existen tres forma de ejecutar secuencias sql con el preparedStatement:
1. Pues.execute(); //Ejecuta la sentencia y retorna true en caso de que la consulta retorne parámetros.
2. Pues.executeQuery(); //Ejecuta la sentencia y retorna el conjunto de registros obtenidos por la consulta
3. Pues.executeUpdate(); //Ejecuta la sentencia y retorna el numero de registros afectados al ejecutar la misma, se utiliza mayormente en actualizaciones, inserciones o borrados.
En tu caso executas la sentencia justo después de preparar el objeto y tienes que setearle los parámetros.
Tienes que cambiarlo por el siguiente:
ps = conexion.prepareStatement(conexion.getStatement("insertarProyecto"));
/* Se asignan los valores de los parámetros asociados al proyecto
* que se va a agregar.*/
//ps.setInt(1, proyecto.getId_proyecto());
ps.setString(1, proyecto.getStr_nombre_pro());
ps.setString(2, proyecto.getStr_direccion_pro());
ps.setInt(3, proyecto.getNum_atc_pro());
ps.setInt(4, proyecto.getNum_atlo_pro());
ps.setString(5, proyecto.getStr_tratamiento_pro());
ps.setString(6, proyecto.getStr_crt_pro());
ps.setString(7, proyecto.getStr_poligono_pro());
ps.setInt(8, proyecto.getFk_constructor());
ps.setInt(9, proyecto.getFk_enajenador());
/*Se ejecuta la sentencia SQL*/
ps.execute();
Uppsss si... jaja segun vi tenia esa parte repetida...
Viejo... sos el mejor!!... ya lo probé y aunque funciona con algunos inconvenientes ya al menos probando ingresó un campo....
Ahora tengo es que revisar partes del código porque me dice error al ingresar datos, pero en la BD aparecen ingresados y ademas no se porque... pero se demora muchísimo en procesar... sabes a que se podría deber eso...
Y definitivamente lastima que no pueda poner 10 estrellas porque te las merecés... Mil gracias!
Viejo... sos el mejor!!... ya lo probé y aunque funciona con algunos inconvenientes ya al menos probando ingresó un campo....
Ahora tengo es que revisar partes del código porque me dice error al ingresar datos, pero en la BD aparecen ingresados y ademas no se porque... pero se demora muchísimo en procesar... sabes a que se podría deber eso...
Y definitivamente lastima que no pueda poner 10 estrellas porque te las merecés... Mil gracias!
Puede ser el manejo del mensaje.
Pero bueno es hora de calificar
Pero bueno es hora de calificar
- Compartir respuesta
- Anónimo
ahora mismo