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.
- Inicie sesión o regístrese para enviar comentarios
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.
edicion de tema
el error me lo da en:
el 0 ya lo corregi, anteriormente trate de solucionarlo poniendole 0, pero tampoco funciono.
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).
El mismo error en la misma
El mismo error en la misma sentencia :s
stacktrace
Para ver el stacktrace completo, cambia el print en el catch por
tal vez encuentres alguna pista
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.
JDBC MySQL
Y ya leíste si el driver de JDBC de MySQL soporta parámetros de salida en stored procedures?
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á.
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.
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.
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.
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...
{?=CALL
Sirve para llamar a una funcion almacenada. Algo que se crea asi:
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
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:
~~~
Buenísimos, pero una pasta
Buenísimos, pero una pasta buena, eso sí.