Acceso a stored procedure

Ayuda:

Estoy trabajando con mysql y tomcat, necesito acceder a un stored procedure:
 

Para comprobar que funciona mando la orden:

 

y funciona perfectamente.

En java tengo el siguiente codigo:
 

pero me marca el error:

java.sql.SQLException: Parameter index of 1 is out of range (1, 0)

en la setencia
 
Ya busque y no encuentro la solucion, espero me puedan ayudar.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

javadoc

Lee la documentación de JDBC... en los Statements las columnas comienzan desde 1, no 0. getInt(1) es lo que necesitas; getInt(0) es inválido. Igual cuando tienes un PreparedStatement con parámetros, el primer valor que le pasas debe ser al índice 1, no 0.

Imagen de beto.bateria

edicion de tema

el error me lo da en:
 

el 0 ya lo corregi, anteriormente trate de solucionarlo poniendole 0, pero tampoco funciono.

Imagen de ezamudio

raro

Los parámetros deben empezar en 1, eso es un hecho, no tiene caso que los empieces en 0. Si te dice que está fuera de rango es que no reconoció el   en la llamada. No debería importar pero... intenta poner   en minúsculas, no mayúsculas (esa no es sentencia SQL, es algo de JDBC y tal vez sea sensible a mayúsculas).

Imagen de beto.bateria

El mismo error en la misma

El mismo error en la misma sentencia :s

Imagen de ezamudio

stacktrace

Para ver el stacktrace completo, cambia el print en el catch por   tal vez encuentres alguna pista

Imagen de beto.bateria

Mas info sobre tema.

Pues ya le busque y no encuentro nada:

El web xml:
 

el context.xml
 

el DataBaseConnection
 

El StatementProcedure:
 

Y el codigo para ejecutarlo
 

Y el dichoso error:
 

En realidad no encuentro ninguna pista del error, ya estuve buscando la tarde de ayer y hoy desde temprano.

Imagen de ezamudio

JDBC MySQL

Y ya leíste si el driver de JDBC de MySQL soporta parámetros de salida en stored procedures?

Imagen de beto.bateria

Estudie un capitulo que habla

Estudie un capitulo que habla sobre el tema en el sitio de mysql, solo que ahi manejan un parametro in/out. No creo que exista algun problema.

Gracias por el apoyo ezamudio.

A ver a ver a ver... tu

A ver a ver a ver... tu llamada dice:

 

No tiene ningún signo de interrogación, luego tu llamada recibe 0 parametros, al intentar llamarla le pasas 1 y por eso truena.

Reemplaza por

 

Como en tu post original y velo funcionar.

Alternativamente, quitase lo a ambos y tambien funcionará.

Imagen de beto.bateria

Al principio asi lo puse :( y

Al principio asi lo puse :( y presenta el error. Ya he tratado de varias formas pero no ha funcionado.

Imagen de beto.bateria

La unica opcion que veo hasta

La unica opcion que veo hasta este momento es tener que instalar de nuevo el mysql.

Pero ya no. Intenta

Pero ya no.

Intenta agregandole un enter para ver si el número de línea cambia.

Intenta quitandole el parametro.

Intenta llamando otro sp ( aunque no existe )

El caso es que logres verificar, si lo que está sucediendo es que no estás actualizando la clase ( quizá olvidaste copiar el jar/war/ear o lo que uses? )

Por que ese error sale cuando no tienes "?"

Intenta aislar el problema.

Crea una aplicación chiquititita y prueba desde ahí:

 

Para que veas que es lo que está sucediendo. Estoy casi seguro que la clase que estás ejecutando no es la que estás viendo.

Imagen de beto.bateria

Otros errores

Ya hice algunos cambios Oscar, me dieron mas informacion acerca del problema, a la mejor el error esta en:

cs.registerOutParameter(1, Types.INTEGER);

o de plano en el Stored Procedure.

Ahora si, que la suerte me acompañe.

¿Qué fue de este asunto?

Tiene tiempo que no trabajo con JDBC, así que corríjanme si estoy mal, pero me parece que si en la declaración llamamos algo como:
 
estamos entonces indicando un parámetro de entrada o entrada/salida.
Creo que para hacer explícito que es un parámetro de salida, deberíamos tener algo como
 
Me parece que como no especificamos el parámetro de salida al inicio de la llamada, al querer registrar el parámetro nos marca la excepción.

Imagen de ezamudio

parámetros de salida

Sí se pueden especificar parámetros de salida como lo está haciendo beto.bateria, porque puedes tener varios parámetros de salida. Al menos Oracle sí los puede manejar así; no sé si MySQL. Por eso mencioné que hay que leer los docs de esa base de datos, en particular del driver JDBC.

Pero no es muy complicado probar la opción de   a ver si así funciona...

Imagen de beto.bateria

{?=CALL

 

Sirve para llamar a una funcion almacenada. Algo que se crea asi:

 

Imagen de beto.bateria

Estuve investigando y al

Estuve investigando y al parecer esta bien el codigo que les mostre :(, este fin de semana instale de nuevo el SO y demas, debido al tiempo invertido en resolver este problema tuve que dejarlo y seguir con otras cosas, despues lo pruebo y les comento.

Que version de mysql tienes

Que version de mysql tienes ???

http://bugs.mysql.com/bug.php?id=9319

Imagen de Mike060987

SP POSIBLE SOLUCION ESO CREO

POR LO QUE VEO ES DE QUE TU SP GENERA UN PARAMETRO SALIDA
EN ESE CASO SEGUN RECUERDO PRIMERO LO TIENES QUE EJECUTAR Y DESPUES
RECOJER EL VALOR QUE REGRESO UNA VEZ QUE LO EJECUTO JAVA
SALUDOS

Google es tu mejor amigo... =)

 

Google es tu mejor amigo. ¿Le has pedido ayuda? =)

~~~

La mejor referencia de JDBC para MySQL al respecto la puedes encontrar en Using JDBC   to Execute Stored Procedures.

También te recomiendo muy ampliamente los siguiente libros:

 

~~~

Imagen de Ziklónico

Buenísimos, pero una pasta

Buenísimos, pero una pasta buena, eso sí.