Comment puis-je exécuter un Serveur MS SQL procédure stockée en java/jsp, le retour des données de la table?

J'ai de la difficulté de l'exécution d'un Serveur MS SQL procédure stockée à partir de Java/jsp. Je souhaite retourner un tableau de données; la dernière ligne de la procédure stockée est un habitué de l'instruction select à partir d'une table.

(À partir de ce point, l'exécution d'une procédure stockée est un jeu d'enfant dans PHP.)

J'ai pris un coup d'oeil à ces sites pour vous aider:

www.2netave.com

www.stackoverflow.com

Je ne le savais pas, il y a une fonction uniquement pour les procédures stockées, comme je l'ai été en utilisant createStatement() à la place.

Maintenant, s'il vous plaît comprendre la procédure stockée s'exécute parfaitement dans SQL Server Management Studio et je n'ai eu aucun problème d'exécution des requêtes ad-hoc en jsp/java avec createStatement().

J'ai créé une procédure stockée simple qui ne prend pas d'arguments, juste pour cerner le problème:

CREATE PROCEDURE sp_test AS
BEGIN
PRINT 'HELLO WORLD'
END

Voici le code dans ma page jsp:

Class.forName("net.sourceforge.jtds.jdbc.Driver");
java.sql.Connection conn = java.sql.DriverManager.getConnection("jdbc:jtds:sqlserver://MySQLServer:1433/test", "user", "pass");
java.sql.CallableStatement cs = conn.prepareCall("{call sp_test}"); 
java.sql.ResultSet ResultSet = cs.execute();

Le navigateur me dit que la page ne peut être affichée car une interne. erreur de serveur s'est produite. Je sais que cela signifie qu'il ya un problème avec le code ci-dessus.

J'ai essayé ceci:

java.sql.ResultSet ResultSet = cs.executeQuery();

Et ce:

java.sql.CallableStatement cs = conn.prepareCall("{execute sp_test}");

Et ce:

java.sql.CallableStatement cs = conn.prepareCall("{exec sp_test}");

Et rien n'a fonctionné. Une fois que je peux obtenir ce travail, alors je peux gérer une véritable procédure stockée qui renvoie les données de la table d'une instruction select. Mais je ne peux même pas obtenir ce mannequin de la procédure stockée à travailler.

Ce que je fais mal ici?

Merci.

Mise à jour:

Vérifié les logs du serveur (IIS) et mon proxy HTTP, violoniste, et il n'est pas signaler quoi que ce soit. Cependant, IIS à l'aide de tomcat en tant que moteur de servlet jsp pages. Et tomcat fichier journal indique que:

An error occurred at line: 20 in the jsp file: /test.jsp
Type mismatch: cannot convert from boolean to ResultSet
17: 
18:     java.sql.CallableStatement cs = conn.prepareCall("{call sp_test}");
19:     
20:     java.sql.ResultSet ResultSet = cs.execute();
21: 
22: //  java.sql.ResultSet ResultSet = state.executeQuery(SQL); 
23: 

J'ai essayé de changer les ci-dessus pour:

cs.execute();

Et les fichiers journaux ont rapporté:

- Servlet.service() for servlet jsp threw exception
java.sql.SQLException: The EXECUTE permission was denied on the object 'sp_test', database 'test', schema 'dbo'.

Donc, j'ai compris je dois GRANT EXECUTE à l'utilisateur. L'autre question est de retourner le tableau de données à partir d'une procédure stockée.

Si j'ai une procédure comme ceci:

CREATE PROCEDURE sp_test2 AS
BEGIN
SELECT * FROM TABLE
END

Comment manipuler les données de la table dans les jsp? Serait ResultSet travail ou est-ce seulement pour les requêtes ad-hoc, par opposition à des procédures stockées, où on utiliserait createStatement() pour exécuter une requête?

Merci.

Update2:

Solution:

Dans le but de manipuler les données de la table, j'ai eu à utiliser ce:

java.sql.ResultSet RS = cs.executeQuery();

Il a échoué sur execute() et il a échoué sur l'appellation de la ResultSet objet "ResultSet". Il ne s'est jamais plaint à ce sujet dans le passé avec createStatement(). Mais pour une raison quelconque, avec des procédures stockées, il n'aimait pas cette convention de nommage.

Merci.

  • parce qu'un interne. erreur de serveur s'est produite. Veuillez lire les journaux du serveur pour trouver l'exception/stacktrace et l'inclure dans votre question. Il contient la réponse.
  • Bon, alors j'ai mis à jour la question et a trouvé que l'utilisateur n'a pas les autorisations appropriées pour exécuter. J'ai donc modifié les permissions de l'utilisateur (c'est à dire ACCORDER EXÉCUTER) et maintenant ça fonctionne. Il y a un boolean erreur avec le jeu de résultats. C'était juste un mannequin de la procédure; la véritable procédure de données de la table je veux processus. Comment cela peut-il être fait? Même que si je devais exécuter une requête ad-hoc?
  • En passant, je vous remercie pour votre aide.
InformationsquelleAutor user717236 | 2011-05-24