Cette question est similaire à: Mysql - Stored procedure OUT variable return null, malheureusement leurs solutions n'ont pas fonctionné pour moi.Procédure stockée Retour Null
J'ai une base de données remplie avec des données sur qui a utilisé mon programme et quand, et j'essaye de créer une procédure stockée dans MySQL pour récupérer toutes les données et l'envoyer à ma servlet java, où elle sera traitée.
C'est ce que j'ai actuellement ma procédure stockée:
CREATE DEFINER=`root`@`localhost`
PROCEDURE `getTableData`(OUT time VARCHAR(45), OUT fName VARCHAR(45),
OUT lName VARCHAR(45), OUT rVar INT)
BEGIN
SELECT rqTime, name, lastName, requestVar FROM pdata.userlist;
END
Voici comment j'appelle la requête en Java:
CallableStatement stmt = null;
ResultSet rs = null;
String sqlQuery = "{call getTableData (?, ?, ?, ?)}";
stmt = conn.prepareCall(sqlQuery);
stmt.registerOutParameter(1, java.sql.Types.VARCHAR);
stmt.registerOutParameter(2, java.sql.Types.VARCHAR);
stmt.registerOutParameter(3, java.sql.Types.VARCHAR);
stmt.registerOutParameter(4, java.sql.Types.INTEGER);
stmt.execute();
Lorsque je tente d'appeler cette procédure stockée en Java (J'ai essayé d'utiliser des ensembles de résultats et la normale getString(), etc) toutes les valeurs renvoient null.
Ma conception de table est le long des lignes de:
Request Time (millis), name, lastName, requestID
1402341252155, John, Doe, 11
Toute aide serait grandement appréciée. Je me sens comme si le problème réside dans la procédure stockée elle-même, en particulier la façon dont je sélectionne les variables de la table et les assigner aux paramètres "out".
Merci!
Avez-vous essayé de faire prepareQuery plutôt que prepareCall et simplement l'exécuter en tant que requête puis en traitant le ResultSet qui est revenu? Je fais ça tout le temps et ça marche bien. –
@Tim vous devez utiliser 'prepareCall' pour exécuter les procédures stockées. –
Puisqu'ils sont hors paramètres, vous devriez utiliser 'stmt.getXxx (index)' pour récupérer les données, n'utilisez pas 'ResultSet'. –