2010-06-10 4 views
0

@WebMethod(operationName = "SearchOR")java.sql.SQLException: Indice de paramètre hors de la plage (3> nombre de paramètres, ce qui est 2)

public SearchOR getSearchOR (@WebParam(name = "comp") 
    String comp, @WebParam(name = "name") 
String name) { 
      //TODO write your implementation code here: 
    SearchOR ack = null; 

    try{ 
    String simpleProc = "{ call getuser_info_or(?,?)}"; 
     CallableStatement cs = con.prepareCall(simpleProc); 
     cs.setString(1, comp); 
     cs.setString(2, name); 
     **ResultSet rs = cs.executeQuery();** 


     while (rs.next()) { 

      ve.add(rs.getString(1)); 
      ve.add(rs.getString(2)); 

     }}catch (Exception e) { 
     e.printStackTrace(); 
     System.out.print(e); 
    } 
    return ack; 
} 

Je reçois erreur à la partie i ai bold.It pointe à cet endroit .Mon Query est ici:

DELIMITER $$

DROP PROCEDURE IF EXISTS.`getuser_info_or $$ # MySQL retourne un jeu de résultats vide (ie zéro lignes) .`

CREATE PROCEDURE. getuser_info_or``

( IN comp VARCHAR(100), IN name VARCHAR(100), OUT Login VARCHAR(100), OUT email VARCHAR(100) )

BEGIN SELECT sLogin, sEmail INTO Login, email FROM ad_user WHERE company = comp OR sName=name; END $$

# MySQL returned an empty result set (i.e. zero rows).

DELIMITER ;

Répondre

3

Je crois que votre problème est votre appel ne correspond pas à la définition de la méthode. Dans votre définition, vous avez deux paramètres: IN comp, IN nom, OUT Connexion, OUT email. Donc, votre appel devrait être:

String simpleProc = "{ call getuser_info_or(?, ?, ?, ?)}"; 

Et des javadocs:

Si elle est utilisée, le paramètre de résultat doit être enregistré comme paramètre OUT.

Donc, vous devez ajouter ces enregistrements:

cs.registerOutParameter(3, Types.VARCHAR); 
cs.registerOutParameter(4, Types.VARCHAR); 

La procédure stockée telle que définie ne crée pas pour les données ResultSet récupérées, mais place plutôt dans les paramètres out. Pour les récupérer, vous devrez y accéder via la déclaration appelable:

String login = cs.getString(3); 
String email = cs.getString(4); 
+0

Merci .REMERCIE ur réponse ... Maintenant gwtting cette erreur idée ..any à ce sujet .. java.sql.SQLException: ResultSet provient de UPDATE. Pas de données. à com.mysql.jdbc.SQLError.createSQLException (SQLError.java:910) à com.mysql.jdbc.ResultSet.next (ResultSet.java:6450) à WS.TestDB.getSearchAnd (TestDB.java: 85) à WS.TestDB.main (TestDB.java:98) – sam

+0

C'est parce que votre procédure ne crée pas un resultset. Vous devez obtenir les valeurs de la déclaration. J'ai mis à jour ma réponse. –

+0

Salut très merci jessup aimerait poser plus de doutes.Si possible, pouvez-vous partager votre adresse e-mail ou IM comme ça quelque chose de sorte qu'il serait plus utile pour moi.Avoir beaucoup de doute ... :-( – sam

Questions connexes