Foros del Web » Programación para mayores de 30 ;) » Java »

java.sql.SQLException: Índice de columna no válido.

Estas en el tema de java.sql.SQLException: Índice de columna no válido. en el foro de Java en Foros del Web. Buenas. Yo tenía un procedimiento con la siguiente cabecera: PROCEDURE PTLP_CONSULTAR_PERFIL_USUARIO (I_USUARIO_BUSCAR IN VARCHAR2, I_CONSULTOR IN VARCHAR2, I_PANTALLA IN VARCHAR2, O_MENSAJE OUT VARCHAR2, O_PERFILES OUT ...
  #1 (permalink)  
Antiguo 23/03/2010, 01:50
 
Fecha de Ingreso: mayo-2009
Mensajes: 169
Antigüedad: 15 años, 6 meses
Puntos: 3
java.sql.SQLException: Índice de columna no válido.

Buenas.

Yo tenía un procedimiento con la siguiente cabecera:

PROCEDURE PTLP_CONSULTAR_PERFIL_USUARIO (I_USUARIO_BUSCAR IN VARCHAR2, I_CONSULTOR IN VARCHAR2,
I_PANTALLA IN VARCHAR2, O_MENSAJE OUT VARCHAR2,
O_PERFILES OUT VARCHAR2 )


Y lo llamaba así desde mi JSP:

miConexion.setSentenciaBase("PTLPKG_VER_PASSWORDS. PTLP_CONSULTAR_PERFIL_USUARIO", 5);
miConexion.sentenciaBase.setString(1, pReq.getQualifiedParameter(paramDni).trim());
miConexion.sentenciaBase.setString(2, pReq.getUser().getName());
miConexion.sentenciaBase.setString(3, "D");
miConexion.sentenciaBase.registerOutParameter(4,Or acleTypes.VARCHAR);
miConexion.sentenciaBase.registerOutParameter(5,Or acleTypes.VARCHAR);

miConexion.ejecutar();


El problema viene cuando le he añadido un parámetro más de entrada (el que está en negrita):

PROCEDURE PTLP_CONSULTAR_PERFIL_USUARIO (I_USUARIO_BUSCAR IN VARCHAR2, I_CONSULTOR IN VARCHAR2,
I_PANTALLA IN VARCHAR2, O_MENSAJE OUT VARCHAR2,
O_PERFILES OUT VARCHAR2, I_LOGIN IN VARCHAR2 DEFAULT NULL )


Y lo llamo así:

miConexion.setSentenciaBase("PTLPKG_VER_PASSWORDS. PTLP_CONSULTAR_PERFIL_USUARIO", 5);
miConexion.sentenciaBase.setString(1, pReq.getQualifiedParameter(paramDni).trim());
miConexion.sentenciaBase.setString(2, pReq.getUser().getName());
miConexion.sentenciaBase.setString(3, "D");
miConexion.sentenciaBase.registerOutParameter(4,Or acleTypes.VARCHAR);
miConexion.sentenciaBase.registerOutParameter(5,Or acleTypes.VARCHAR);
if(pReq.getQualifiedParameter(paramUsuario)!=null)
miConexion.sentenciaBase.setString(6, pReq.getQualifiedParameter(paramUsuario));


miConexion.ejecutar();


Pero ahora me da el error: java.sql.SQLException: Índice de columna no válido


¿Alguien sabe a qué se debe?

Muchas gracias por anticipado.
__________________
http://felinfo.blogspot.com/
  #2 (permalink)  
Antiguo 23/03/2010, 05:48
 
Fecha de Ingreso: mayo-2009
Mensajes: 169
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: java.sql.SQLException: Índice de columna no válido.

Resumiendo:

Tengo un procedimiento PL/SQL con un parámetro DEFAULT.

Al declararlo desde java como un parámetro de entrada, me da el error:

java.sql.SQLException: Índice de columna no válido



Le agradecería que me ayudaran ...
__________________
http://felinfo.blogspot.com/
  #3 (permalink)  
Antiguo 23/03/2010, 06:23
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 9 meses
Puntos: 10
Respuesta: java.sql.SQLException: Índice de columna no válido.

Wenas

De oracle, la verdad es que no se mucho, pero parece que defines que si el parametro no viene, le encasquete null.

Lo que si esta claro es que el error que te esta dando es porque falta un parametro en la llamada al procedimiento.

Tampoco se como funciona tu clase sentenciaBase, pero me figuro que sera una especie de preparedstatement.

Asi que tendra que tener un metodo setnull o algo parecido

Por que no ??

Código:
if(pReq.getQualifiedParameter(paramUsuario)!=null)
miConexion.sentenciaBase.setString(6, pReq.getQualifiedParameter(paramUsuario));
else
   preparedstatement.setNull(6, Types.VARCHAR);
Saludos.
__________________
--
NO. Tu problema no es urgente.

CCFVLS
  #4 (permalink)  
Antiguo 23/03/2010, 06:24
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 1 mes
Puntos: 51
Respuesta: java.sql.SQLException: Índice de columna no válido.

Cita:
Iniciado por Noelito3 Ver Mensaje
Y lo llamo así:
miConexion.setSentenciaBase("PTLPKG_VER_PASSWORDS. PTLP_CONSULTAR_PERFIL_USUARIO", 5);
miConexion.sentenciaBase.setString(1, pReq.getQualifiedParameter(paramDni).trim());
miConexion.sentenciaBase.setString(2, pReq.getUser().getName());
miConexion.sentenciaBase.setString(3, "D");
miConexion.sentenciaBase.registerOutParameter(4,Or acleTypes.VARCHAR);
miConexion.sentenciaBase.registerOutParameter(5,Or acleTypes.VARCHAR);
if(pReq.getQualifiedParameter(paramUsuario)!=null)
miConexion.sentenciaBase.setString(6, pReq.getQualifiedParameter(paramUsuario));
miConexion.ejecutar();


Pero ahora me da el error: java.sql.SQLException: Índice de columna no válido
¿Que hace el método setSentenciaBase y qué significa el parametro 5? Es altamente sospechoso .

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 23/03/2010, 06:31
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 9 meses
Puntos: 10
Respuesta: java.sql.SQLException: Índice de columna no válido.

jaja tienes razon.

Ese parametro 5no querra decir que espera 5 parametros para formar el preparedstatement??

Que ojo tienes, greeneyed.
__________________
--
NO. Tu problema no es urgente.

CCFVLS
  #6 (permalink)  
Antiguo 23/03/2010, 06:58
 
Fecha de Ingreso: mayo-2009
Mensajes: 169
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: java.sql.SQLException: Índice de columna no válido.

Perdona GreenEyed. Gracias por lo la pista. Jejeje, si es un lobo me come. :D Voy a probarlo ...
__________________
http://felinfo.blogspot.com/

Última edición por Noelito3; 23/03/2010 a las 07:18
  #7 (permalink)  
Antiguo 23/03/2010, 07:16
 
Fecha de Ingreso: mayo-2009
Mensajes: 169
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: java.sql.SQLException: Índice de columna no válido.

Perdona GreenEyed. Jejeje, si es un lobo me come. :D Voy a probarlo ...
__________________
http://felinfo.blogspot.com/
  #8 (permalink)  
Antiguo 24/03/2010, 03:02
 
Fecha de Ingreso: mayo-2009
Mensajes: 169
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: java.sql.SQLException: Índice de columna no válido.

Me está dando el mismo error (java.sql.SQLException: Índice de columna no válido), pero ahora llamando a una función PL/SQL:

Mi código java:

miConexion.sentenciaBase = miConexion.conDB.prepareCall("{? = call LDPF_REGENERA_PASSWORD(?)}");
miConexion.sentenciaBase.registerOutParameter (1, Types.VARCHAR);
miConexion.sentenciaBase.setString(2, pReq.getQualifiedParameter(paramUsuario));
miConexion.sentenciaBase.setString(3, pReq.getUser().getName());
miConexion.ejecutar();
String error = miConexion.sentenciaBase.getString(1);


el procedimiento:

CREATE OR REPLACE FUNCTION PR_LDAP.LDPF_REGENERA_PASSWORD (I_CN_USUARIO VARCHAR2, I_USUARIO_ADMINISTRADOR VARCHAR2) RETURN PLS_INTEGER IS


Por favor, necesito ayuda!
__________________
http://felinfo.blogspot.com/
  #9 (permalink)  
Antiguo 24/03/2010, 03:35
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 9 meses
Puntos: 10
Respuesta: java.sql.SQLException: Índice de columna no válido.

Cita:
Iniciado por Noelito3 Ver Mensaje
miConexion.sentenciaBase = miConexion.conDB.prepareCall("{? = call LDPF_REGENERA_PASSWORD(?)}");
miConexion.sentenciaBase.registerOutParameter (1, Types.VARCHAR);
miConexion.sentenciaBase.setString(2, pReq.getQualifiedParameter(paramUsuario));
miConexion.sentenciaBase.setString(3, pReq.getUser().getName());
miConexion.ejecutar();
Pero vamos a ver.

Si la llamada a la funcion tiene 2 parametros por que le pasas 3??
__________________
--
NO. Tu problema no es urgente.

CCFVLS
  #10 (permalink)  
Antiguo 24/03/2010, 03:44
 
Fecha de Ingreso: mayo-2009
Mensajes: 169
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: java.sql.SQLException: Índice de columna no válido.

Hola elAntonie.

Tiene dos parámetros de entrada y uno de salida. Las funciones en PL/SQL son distintas a los procedimientos ...
__________________
http://felinfo.blogspot.com/
  #11 (permalink)  
Antiguo 24/03/2010, 03:57
 
Fecha de Ingreso: mayo-2009
Mensajes: 169
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: java.sql.SQLException: Índice de columna no válido.

Buenas.

Ya he encontrado la solución:

Cuando la función tiene un parámetro se llama así:

miConexion.sentenciaBase = miConexion.conDB.prepareCall("{? = call LDPF_REGENERA_PASSWORD(?)}");


Pero cuando tiene dos, se llama así:

miConexion.sentenciaBase = miConexion.conDB.prepareCall("{? = call LDPF_REGENERA_PASSWORD(?,?)}");

Saludos a todos!
__________________
http://felinfo.blogspot.com/

Etiquetas: columna
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:01.