IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

[débutant][JDBC] récupérer résultat d'une procédure stokée


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 28
    Par défaut [débutant][JDBC] récupérer résultat d'une procédure stokée
    Bonjour,

    Pour récupérer le temps d'èxécution de ma requete, que je lance de mon programme java sur SQL server, je récupère le temps avant et apres la requete (j'en fais une soustraction par la suite).

    Le probleme étant que j'arrive pas à récupérer sous java, le résultat de ma requète qui me donne le temps. (Select CURRENT_TIMESTAMP sous SQL Server).
    J'ai bien regardé la FAQ de la JDBC mais ca ne marche toujours pas.
    J'ai essayer avec un statement simple (comme une requete normale) dans ce cas là il me dit que le curseur n'est pas valide ou j'ai un probleme de type apres. Ou encore, avec un callableStatement (pour les procédure stockées) mais là j'ai pas trop compris comment ca marchait (où dois je mettre la requete ci dessus ?).

    Est ce quelqu'un pourrait m'aider ??? (tout simplement pour récupérer le résultat de la requete ci-dessus), peut importe le moyen...

    Merci

  2. #2
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    tu peux nous mettre un peu de code ...
    comment appelles tu exactement ta procedure etc
    t'as peut etre un pb dans tes parametres (ta proc retourne bien une valeur ? elle fonctionne bien si tu l'execute dans ta db ?

  3. #3
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    sinon voila comment marche un appel a une procedure stockée (pour oracle mais c'est du jdbc):

    les 2 premiers parametres sont des parametres IN , le troisieme est OUT et renvoie le resultat que j'attends:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    String msg = "";
    Connection con = getMyConnection();
    CallableStatement stmt = con.prepareCall("{call PCK_MY_PACKAGE.PRC_MY_PROC(?,?,?)}");
    //  set the in param
    stmt.setString(1, param1);
    stmt.setString(2, param2);
    //set the out param
    stmt.registerOutParameter(3, OracleTypes.VARCHAR);
     
    ResultSet rs = stmt.executeQuery();
    msg = stmt.getString(3);
    return msg;
    par contre si ta requete c'est juste un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select CURRENT_TIMESTAMP from dual
    pourquoi faire une procedure stockée et pas juste une requete jdbc simple ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 28
    Par défaut
    désolé de ne pas avoir répondu plus tot (faut dire que j'ai un décallage horaire de 7heure avec vous).

    La requete "select CURRENT_TIMESTAMP", exécutée comme telle sous SQL Server me renvoie le temps courant.
    Je veux simplement récupérer le résultat de cette requête sous java...
    Voici un premiere essai de mon code, qui n'a rien donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver" );
    Connection con = DriverManager.getConnection" jdbc:odbc:Server1","","");
    Statement st= con.createStatement();
     
    long T = 0;
    Timestamp ts = new Timestamp(T); 
    ResultSet s = st.executeQuery("select CURRENT_TIMESTAMP");
    ts = s.getTimestamp(1);
    System.out.println("=>"+ ts.toString());
    En exécutant ce code, java me dit : "Etat du curseur non valide" (en rajoutant "from dual" dans la requete, il me dit qu'il ne connait pas cette table).

    Comme je n'arrivais à rien de cette maniere, j'ai essayé d'une autre facon, mais pour un meme résultat. Voici le code avec les CallableStatement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver" );
    Connection con = DriverManager.getConnection" jdbc:odbc:Server1","","");
    Statement st= con.createStatement();
     
    CallableStatement stmt = con.prepareCall("{call tps(?)}"); 
    stmt.registerOutParameter(1, Types.TIMESTAMP); 	       
    ResultSet rs = stmt.executeQuery(); 
     
    Timestamp msg = stmt.getTimestamp(1);
    System.out.println("=>"+ msg.toString());
    où tps est la requete suivante :
    CREATE PROCEDURE tps AS BEGIN
    SELECT CURRENT_TIMESTAMP;
    END
    Là, il me dit qu'il ne connait pas le fonction tps. J'ai essayé plein de truc mais je dois pas faire ca correctement.

    J'espere que vous avez compris mon probleme, peu m'importe le facon d'arriver à mon résultat...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 28
    Par défaut
    personne pour m'aider ?
    je ne pensais pas que c'était si difficil...

  6. #6
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    salut,

    réponse un peu tardive ;-)

    en fait tu n'as pas besoin de procedure, ton premier exemple fonctionne avec 2 modif:

    il faut bien rajouter from dual sinon ca ne peut pas fonctionner.
    ensuite une fois la requete executée, il faut appeler s.next() sinon ton curseur reste a zero
    le code suivant devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver" ); 
    Connection con = DriverManager.getConnection" jdbc:odbc:Server1","",""); 
    Statement st= con.createStatement(); 
     
    long T = 0; 
    Timestamp ts = new Timestamp(T); 
    ResultSet s = st.executeQuery("select CURRENT_TIMESTAMP from DUAL"); 
    s.next();
    ts = s.getTimestamp(1); 
    System.out.println("=>"+ ts.toString());
    voila

    @+

Discussions similaires

  1. Comment récupérer le résultat d'une procédure stockée (OUT parameter) ?
    Par java2008 dans le forum Interfaces de programmation
    Réponses: 1
    Dernier message: 08/04/2008, 13h00
  2. Réponses: 7
    Dernier message: 18/01/2008, 18h01
  3. Réponses: 3
    Dernier message: 31/05/2007, 09h54
  4. Récupérer le résultat d'une procédure stockée
    Par DanZzz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/11/2006, 22h08
  5. [C#] Récupérer le résultat d'une procédure stockée
    Par fabrice1596 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/10/2004, 13h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo