2017-01-31 1 views
1

J'essaie d'appeler une procédure stockée à partir de Java en utilisant JDBC4PreparedStatement. La procédure stockée prend deux paramètres d'entrée et une sortie. Je mets les deux paramètres d'entrée en appelant preparedStatement.setString(index, param)Comment utiliser JDBC4PreparedStatement avec une procédure stockée MySQL en attente d'un paramètre OUT?

mais j'ai essayé la même chose pour la sortie et obtenir cette erreur: OUT or INOUT argument 3 for routine db.deleteItem is not a variable or NEW pseudo-variable in BEFORE trigger

Y at-il un type spécifique que je dois utiliser? Si oui, comment puis-je le définir? Je n'ai pas trouvé de bons exemples.

Merci

Répondre

1

Vous ne devriez pas utiliser une instruction préparée pour cela, mais une instruction appelable à la place. Vous pouvez considérer une instruction callable comme une instruction préparée avec des fonctionnalités supplémentaires pour prendre en charge les procédures stockées (y compris les paramètres OUT). Pour enregistrer les paramètres, vous pouvez utiliser CallableStatement.registerOutParameter.

0

Lorsque nous marquons des paramètres comme OUT ou INOUT, l'attente est que le SP devrait être en mesure de travailler avec ces paramètres et en même temps, il devrait être une variable au lieu d'une valeur. Cette variable peut ensuite être utilisée à un moment ultérieur.

Une valeur pour un paramètre OUT/INOUT pour le SP n'a pas beaucoup de sens car le SP ne peut pas manipuler la valeur et donc l'erreur. Nous pouvons simplement passer des valeurs pour les paramètres IN seuls.

Vous pouvez consulter la documentation this ici qui stipule:

To get back a value from a procedure using an OUT or INOUT parameter, pass the parameter by means of a user variable, and then check the value of the variable after the procedure returns. (If you are calling the procedure from within another stored procedure or function, you can also pass a routine parameter or local routine variable as an IN or INOUT parameter.)

Alors, ce que vous pouvez faire est quelque chose de similaire à la réponse acceptée here!

CALL alextest10 ('p99', 'Madeuppy', '999', 'w9', @a_message); 
SELECT @a_message; 

Espérons que cela aide!

+0

utile, et je suis capable de le faire en SQL. J'essaie de voir comment je peux assigner un paramètre INOUT de PreparedStatement, mais il semble qu'il ne le supporte pas et CallableStatement le fait. – Seephor