2009-11-05 2 views
1

J'appelle un 2005 MS SQL Server procédure stockée en utilisant le MS pilote JDBC et que vous souhaitez accéder aux paramètres de sortie avant de traiter le jeu de résultats comme suit:Accès aux paramètres de sortie avant résultat de traitement défini dans SQL Server via jdbc

 proc = "{call mySproc(?,?,?)}"; 
     conn = ds.getConnection(); 
     callableStmt = conn.prepareCall(proc); 
     callableStmt.setString(1,inputParam); 
     callableStmt.registerOutParameter(2,Types.INTEGER); 
     callableStmt.registerOutParameter(3,Types.INTEGER); 
     callableStmt.execute(); 

     rs = (ResultSet)callableStmt.getResultSet(); 
     output[0] = callableStmt.getInt(2); //@rc 
     output[1] = callableStmt.getInt(3); //@rs   

     if(output[0] != 0){ 
      //do some stuff 
     } else { 
      // process result set 
     } 

Le problème est que l'accès aux paramètres de sortie avant le traitement du jeu de résultats provoque la fermeture du jeu de résultats.

Y at-il un moyen que je puisse réaliser ceci sans modifier la procédure stockée?

Il est possible de le faire via JDBC pour d'autres bases de données. Cependant, à partir des recherches que j'ai trouvé les JDBC Spec états:

Pour une portabilité maximale, objets ResultSet et mise à jour d'un ci compte doivent être traités avant d'obtenir les valeurs des paramètres de sortie.

Est-ce que le pilote MS JDBC a été implémenté à la lettre de la loi et que d'autres pilotes JDBC ont fourni des implémentations plus flexibles? En espérant que quelqu'un puisse éclaircir ma compréhension de ce problème.

Répondre

2

Les paramètres de sortie apparaissent sur le câble après tous les jeux de résultats. Tout client, quelle que soit la plate-forme ou la technologie, doit d'abord analyser tous les résultats avant même de voir les valeurs des paramètres de sortie.

S'il existe des clients qui offrent la valeur des paramètres de sortie avant de consommer les ensembles de résultats, cela signifie qu'ils mettent en cache les ensembles de résultats en mémoire. Très mauvais considérant les ensembles de résultats peuvent grandir citation grand.