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 :

[JDBC] Récupérer données dans autre chose qu'un ResultSet


Sujet :

JDBC Java

  1. #1
    Membre averti Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 312
    Points
    312
    Par défaut [JDBC] Récupérer données dans autre chose qu'un ResultSet
    Bonjour,

    Je développe une appli web J2EE classique

    J'ai une requête SQL PreparedStatement qui, dans tous les cas, ramène une ou aucune ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT * FROM CLIENT WHERE CODE_CLIENT = ?
    J'utilise toujours l'objet ResultSet pour stocker le résultat de mes requêtes mais je me demandais s'il n'existe pas un objet plus adapté à ce style de requête.

    En effet le ResultSet est destiné à contenir un ensemble de lignes à la manière d'un tableau. N'existe-t-il pas un objet destiné à stocker un seul enregistrement ?
    "Wash me away Clean your body of me Erase all the memories They'll only bring us pain And I've seen All i'll ever need"

  2. #2
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Meme s'il existe un autre objet (je ne pense pas, mais bon, je me trompe surement), je te conseille de toujours utiliser un ResultSet. En effet, j'avais aussi des requetes qui ne me renvoyaient qu'une ligne. mais suite à des problèmes dans nos bases de données, certaines requetes nous renvoyaient plusieurs lignes. Si nous n'avions pas eu des ResultSet, avec des tests sur le nombre d'objets retournés et des messages d'erreurs explicites, nous n'aurions jamais découvert que notre base de données était corrompue.

    Par contre, il n'existe aucune méthode native de java pour trouver le nombre de lignes d'un ResultSet et c'est bien dommage.

    J'espère t'avoir aidé.

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Skydoll
    Par contre, il n'existe aucune méthode native de java pour trouver le nombre de lignes d'un ResultSet et c'est bien dommage.
    Mais cela reste possible : FAQ : Comment connaître le nombre de lignes/colonnes d'un ResultSet ?

    a++

  4. #4
    Membre averti Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 312
    Points
    312
    Par défaut
    En fait pour savoir si la requête n'a ramené u'une seule ligne il faut faire 2 fois "rs.next();". Je m'explique


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //si la requête retourne quelque chose
    if (rs.next()) {
          //j'instancie mon objet avec le résultat de la requête
     
          //si il ya une autre ligne dans le ResultSet
          if (rs.next()) {
                 //lever une excpetion
          }
     
    }
    Si on ne gère pas cette exception, aucune exception n'est levé et on est pas sûr d'instancier son objet avec le bon résultat de requête.
    "Wash me away Clean your body of me Erase all the memories They'll only bring us pain And I've seen All i'll ever need"

  5. #5
    Membre averti Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 312
    Points
    312
    Par défaut
    (Suite du message précédent)
    Existe-t-il une meilleure méthode ?
    "Wash me away Clean your body of me Erase all the memories They'll only bring us pain And I've seen All i'll ever need"

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    @Adiguba et danyboy : oui, j'ai souvent utilisé la méthode décrite dans la FAQ. Je trouve juste dommage qu'il n'existe pas de méthode native dans java pour le faire.

    @danyboy : Le 2 fois next est uen méthode comme une autre, mais j'ai tendance à ne pas aimer faire "planter délibérément" mon appli
    La méthode de se placer au dernier élément du ResultSet et de récuperer son index est à mon avis plus propre, mais après c'est une question de point de vue.

    Et on s'écarte de la question première : existe t il un autre objet que le ResultSet pour récupérer le résultat d'une requête?

    Skydoll.

  7. #7
    Membre averti Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 312
    Points
    312
    Par défaut
    Le 2 fois next est uen méthode comme une autre, mais j'ai tendance à ne pas aimer faire "planter délibérément" mon appli
    OK on s'écarte du sujet mais je tiens tout de même à te faire remarquer
    que le rs.next() retourne un boolean. Testé dans une condition if, il ne fais pas planter l'appli !!!
    "Wash me away Clean your body of me Erase all the memories They'll only bring us pain And I've seen All i'll ever need"

  8. #8
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Je comprend pas bien le problème, si tu es sur qu'il y a soit un enregistrement soit 0 alors tu fais juste un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (rs.next){
      //... recup les valeurs de ton enregistrement...
    }
    pour les autres enregistrements (s'il vient à en avoir d'autre) tu les oublis.
    Etre c'est etre relatif.

  9. #9
    Membre averti Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 312
    Points
    312
    Par défaut
    Pas daccord !
    Si ton but était de récupérer le client 2 et que la requête te ramène les clients 1 et 2 , comment tu t'assures d'avoir récupéré le bon enregistrement ?
    "Wash me away Clean your body of me Erase all the memories They'll only bring us pain And I've seen All i'll ever need"

  10. #10
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Citation Envoyé par danyboy85
    Pas daccord !
    Si ton but était de récupérer le client 2 et que la requête te ramène les clients 1 et 2 , comment tu t'assures d'avoir récupéré le bon enregistrement ?
    Dans ce cas la, c'est a toi de faire le necessaire pour que ta requete ne te ramene qu'un seul enregistrement.
    Etre c'est etre relatif.

  11. #11
    Membre averti Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 312
    Points
    312
    Par défaut
    En fait pour être concret, mon appli sert à gérer la gestion des temps dans une entrprise.

    En fonction de l'heure ou un salarié pointe, je vais chercher dans la base de données un enregistrement correponsdant à une plage horaire, mais si un salarié arrive en avance ou en retard, l'heure de pointage peut corresondre à plusieurs plages horaires différentes. Dans ca cas, le pointage est refusé

    Donc j'aurai voulu un objet, autre que le ResultSet qui ne puisse contenir qu'un seul enregistrement, et qui retourne par exemple un boolean false ou qui plante si on lui passe plusieurs enregistrements

    Mais bon, visiblement il n'existe pas d'objet meilleur que le ResultSet, et mon problème est tout de même gérable de plein d'autres manières.

    Merci quand même !
    "Wash me away Clean your body of me Erase all the memories They'll only bring us pain And I've seen All i'll ever need"

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/02/2006, 21h18
  2. Réponses: 13
    Dernier message: 10/12/2005, 13h34
  3. [JDBC] Connexion a une base de données Access
    Par sg-40 dans le forum JDBC
    Réponses: 4
    Dernier message: 05/11/2005, 15h25
  4. [JDBC][MySQL] Connexion à la base de données
    Par El Saigneur dans le forum JDBC
    Réponses: 8
    Dernier message: 04/08/2005, 13h52
  5. [JDBC]Creation d'une base de données
    Par julien21 dans le forum JDBC
    Réponses: 2
    Dernier message: 08/01/2005, 22h11

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