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 :

Récupérer statut requête


Sujet :

JDBC Java

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    716
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 716
    Par défaut Récupérer statut requête
    Bonjour,

    J'utilise l'objet Connection pour faire des requêtes SQL sur une base de données Oracle.
    Je voudrais savoir comment je peux récupérer le status de la connection (SS_NORM, SS_NOREC...) ?

    Merci pour votre aide.

  2. #2
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    De base, tu n'as que les choses génériques proposées par l'implémentation standard. Cf la Javadoc pour voir ce qui est dispo.

    Sinon, la base sur laquelle tu travailles a peut être un driver spécifique qui te permettrai d'avoir des informations plus spécifique. Mais bon, c'est au détriment de la portabilité.

    Au lieu d'un

    Connection conn;

    tu auras par exemple un

    OracleConnection conn;

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    716
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 716
    Par défaut
    J'utilise déja le driver oracle (ojdbc14.jar).

    Je n'ai rien trouvé sur google pour récupérer le status...

    Merci pour votre aide.

  4. #4
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    716
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 716
    Par défaut
    Merci, mais je ne vois rien qui me permettrait de récupérer le status ?

    il est écrit que c'est pour les extensions Oracle...

    Merci pour votre aide.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    c'est quoi le but recherché? Savoir si la connexion fonctionne toujours? Dans ce cas exécute select 1 from dual, et si ça ne déclenche pas d'erreur et que t'as bien un row en réponse, tout va bien

  7. #7
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    716
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 716
    Par défaut
    Bonjour,

    Le but recherché est de savoir si la requête s'est bien passé (dans ce cas le status est SS_NORM == 0), de savoir si elle ne retourne rien (SS_NORM == -35), ou encore par exemple de savoir si l'enregistrement existe déja (SS_DUPK).

    Si la requête s'est bien passé on continue, sinon on affiche un message d'erreur ou l'on fait une requête avec moins de clause par exemple.

    Merci pour votre aide.

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Normalement, si une requete se passe mal, vous aurez toujours un SQLException. Après, comme indiquez, castez votre connexion en OracleConnection pour avoir du contrôle specifique oracle dessus.

  9. #9
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    716
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 716
    Par défaut
    Par exemple pour le status NOREC, la requête se passe bien mais ne retourne aucun résultat.

    Comme dis précédemment, je n'ai rien trouvé dans la classe OracleConnection permettant de récupérer le status (sauf si c'est dans une sous classe)...

  10. #10
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Le fait qu'une requête ne renvoie pas de résultat n'a rien à voir avec le statut de la connexion, c'est l'analyse du ResultSet qui permet de savoir s'il y a des données ou non...
    Globalement, on met toutes les opérations dans un try catch finally et on nettoie dans finally.
    Si la connexion est morte, tu passeras par le catch, sinon, c'est le traitement dans le corps qui déterminera les éventuels problèmes...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    si la requete n'a pas de résultat, ben vote resultSet est vide. Si il s'agissait d'un update, la méthode Statement.executeUpdate() retourne le nombre de Rows affectés.

    JE dois avouer que personellement j'ai toujours trouvé toutes les infos dont j'avais besoin pour faire mon code dans les apis standard. Mais bon, vous avez peut-être des besoin très spécifiques. Vos codes de résultat, ils sortent d'où?

  12. #12
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    716
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 716
    Par défaut
    On peut trouver les codes de résultat sur le site d'oracle :
    voici par exemple pour le -35 ou 1035 :
    http://answers.vt.edu/kb/entry/1722

  13. #13
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Oui mais votre clés SS_NORM, SS_DUPK etc il sortent d'ou? J'ai l'impression que vous avez un code dans un autre language et que vous essayez de l'adapter tel quel. En java, on travaille avec la couche JDBC qui fournis des informations de haut niveau (réussite ou non, nombre de row modifiés) et les codes d'erreur sont toujours présent dans les Exception levées quand il y en a.

  14. #14
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    716
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 716
    Par défaut
    C'est pas grave si je ne récupère pas SS_NORM, je connais les valeurs (SS_NORM == 0, SS_NORC == -35...).

    Je souhaite juste récupérer le status. Dans le langage que je connais je faisait cela par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (session.status == StatusCode.SS_NORM)
    {
    session.commitTransaction();
    }
    else
    {
    session.rollbackTransaction();
    }
    Les instruction commit et rollback, j'ai bien trouvé en java mais status non.

  15. #15
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    en java tu fera ce code comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    try {
      // une ou plusieurs opération SQL
      connexion.commit();
    } catch (SQLException e){
      connexion.rollback();
    } finally {
      connexion.close();
    }
    ou si tes règles sont plus complexes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    boolean doCommit=false;
    try {
      // une ou plusieurs opération SQL
      doCommit=true; //super on a tout réussi
    } catch (SQLException e){
      log.error("Houla ca marche pas",e);
    } finally {
      if (doCommit)
        connexion.commit();
      else
        connexion.rollback();
      connexion.close();
    }
    Tu n'a pas besoin de chipotter les status, le driver le fait pour toi.

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/02/2007, 14h46
  2. Récupérer valeur requête SQL
    Par joquetino dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 10/08/2006, 16h23
  3. [MySQL] Récupérer résultat requête tableau
    Par Invité dans le forum JDBC
    Réponses: 2
    Dernier message: 03/05/2006, 09h22
  4. Réponses: 5
    Dernier message: 26/04/2006, 16h06
  5. [D5][BDE][Multibase] Récupérer les requêtes SQL d'une TTable
    Par Escandil dans le forum Bases de données
    Réponses: 3
    Dernier message: 11/01/2006, 15h29

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