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]Connaitre nb d'enregistrement d'un ResultSet


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
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Par défaut [Résolu] [JDBC]Connaitre nb d'enregistrement d'un ResultSet
    Bonjour;

    la question est dans le titre

    Mon problème est que je veux utiliser un tableau de String à deux dimension.
    Je suis donc obligé d'instancier en y donnant la longueurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[][] monTab = new String[x][y];
    Or le x c'est justement le nombre d'enregistrement du resultSet

    comment puis je faire ?

    (je préfère ne pas utiliser de Vector)..

    Merci!

  2. #2
    Membre éclairé
    Inscrit en
    Juin 2004
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 65
    Par défaut
    sur le resultSet : getFetchSize()
    mon dieu, 45s de recherche ds la javadoc ....

    et si ça marche pas, parce que pas testé, il y a ça aussi : http://www.developpez.net/forums/viewtopic.php?t=302646

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Par défaut
    Merci pour ta réponse mais j'avais déjà essayé, ca ne répond pas à ce que je veux.

    Pour info il s'agit de l'appel d'une procedure stockée.

    Une autre idée?

  4. #4
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut Re: Connaitre nb d'enregistrement d'un ResultSet
    Citation Envoyé par JeffK
    je préfère ne pas utiliser de Vector...
    Ah bon, et pourquoi ça donc ...

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Par défaut
    Bah, c clair ce serait mieux, mais l'appli cliente a été codé avec des méthodes renvoyant des String[][]. Donc si je veux pas me refarcir le code de cette appli j'ai plutot intéret à utiliser les memes types de données.

    En attendant j'ai déroulé le ResultSet avec un while pour connaitre le nombre d'enregidtrement mais c po top du tout

  6. #6
    Membre chevronné Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2003
    Messages : 457
    Par défaut
    Normalement,
    tu peux faire ca (pas tester)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int currentRow = resultset.getRow() ;
    resultset.last();
    int nbResult = resultset.getRow();
    resultset.absolute(currentRow);
    Reste à mettre des try et à tester les valeurs de retour de last() et absolute()

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2002
    Messages : 77
    Par défaut
    salut !

    Si j'ai bien compris mes un compteur dans la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int compteur = 0;
    while (tonresultset.next())
    {
        ------
        compteur++;
    }
     
    String[][] monTab = new String[compteur][y];
    // ton y c'est quoi ?
    tu peux nous poster ton code correspondant pour voir
    Bonne chance

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Par défaut
    [quote="Midou"]salut !

    Si j'ai bien compris mes un compteur dans la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int compteur = 0;
    while (tonresultset.next())
    {
        ------
        compteur++;
    }
     
    String[][] monTab = new String[compteur][y];
    // ton y c'est quoi ?
    Bon, ce problème est épineux en fait
    Je pense qu'il n'y a pas de méthode pour connaitre la taille d'un resulSet

    D'autre part j'utilise sybase et on ne peut pas faire de .last() ou .first(), j'ai eu confirmation par un collegue ([BEA][Sybase JDBC Driver]Unsupported method: ResultSet.last par exemple).
    Si j'utiise un compteur je ne pourrais donc pas revenir à mon premier enregistrement!

    Donc il ne me reste plus qu'à récupéré les données dans des vector ou arrylist temporaires et à les recopier dans mes String[][].

    ca m'enchante pas mais bon

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 27
    Par défaut
    Personnellement j'ai déja posté un message similaire il y a quelques jours.

    La seule solution que j'ai trouvée est la suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    resultSet.last(); // Positionne le curseur à la fin du resultSet
    int nb = resultSet.getRow(); // Récupère le nombre de records
    resultSet.beforeFirst(); // Repositionne le curseur AVANT le 1er record
     
    ou 
     
    resultSet.first(); // Positionne le curseur sur le 1er record.
    Parfois aussi je positionne le curseur à la fin du ResultSet, crée mon array de la taille désirée mais je la rempli en partant de la fin du resultSet en remontant vers le début et rempli l'array aussi depuis la fin vers le début.

    C'est dommage qu'il ne soit pas plus aisé de récupérer le nb de record.

    Bonne soirée.
    Jean-Marc

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Par défaut
    Citation Envoyé par salome
    Personnellement j'ai déja posté un message similaire il y a quelques jours.

    La seule solution que j'ai trouvée est la suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    resultSet.last(); // Positionne le curseur à la fin du resultSet
    int nb = resultSet.getRow(); // Récupère le nombre de records
    resultSet.beforeFirst(); // Repositionne le curseur AVANT le 1er record
     
    ou 
     
    resultSet.first(); // Positionne le curseur sur le 1er record.
    Parfois aussi je positionne le curseur à la fin du ResultSet, crée mon array de la taille désirée mais je la rempli en partant de la fin du resultSet en remontant vers le début et rempli l'array aussi depuis la fin vers le début.

    C'est dommage qu'il ne soit pas plus aisé de récupérer le nb de record.

    Bonne soirée.
    Jean-Marc
    Merci pour ces info et désolé pour la redite
    C'est bien la seule manière je pesne et on peut considérer ce topic comme résolu.
    Dommage que le driver jdbc Sybase n'autorise pas ces manip sur le ResultSet c'est quand meme abérant pour un SGBD payant!!
    Enfin po trop le choix puisque c'est celui de ma boite...

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 25
    Par défaut
    héhé

    Pour pouvoir utiliser resultSet.first() etc il faut créer le CallableStatement avec comme param:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CollableStatement cs =
      connection.prepareCall(
        "{call stockProc(?,?)}",
        ResultSet.TYPE_SCROLL_INSENSITIVE,
        ResultSet.CONCUR_READ_ONLY);
    A ce propos connaissez vous la différence entre
    TYPE_SCROLL_INSENSITIVE et
    TYPE_SCROLL_SENSITIVE ?

  12. #12
    Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Par défaut nbre d'enregistrement dans resultSET
    Voilà , en java il faut avancer tous d'abort resultset.next()
    puis int nbreEnregsitrement=resultset.getRow();
    if(nbreEnregsitrement !=0)
    {
    }
    else
    {
    }
    habib halleb

  13. #13
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Par défaut
    Par exemple tu as une variable res de type ResultSet, pour connaitre le nombre de colonne tu peux utiliser une varialble de type ResultSetMetaData pour connaitre le nombre de colonne et les noms des colonnes.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        ResultSet res = stmt.executeQuery(requeteSQL);
     
        // Colonne du ResultSet
        ResultSetMetaData rsmd = res.getMetaData();
        int nbColonne = rsmd.getColumnCount();
     
        for (int i=1; i <= nbColonne; i++) {
             // Affiche le nom des colonnes  
             System.out.println(rsmd.getColumnLabel(i));
        }	
     
        // Nombre de ligne : je pense que ca marche
        int nbLigne = res.getFetchSize();

  14. #14
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut
    Voilà , en java il faut avancer tous d'abort resultset.next()
    puis int nbreEnregsitrement=resultset.getRow();
    resultSet.last(); plutôt, non ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] connaitre si un enregistrement existe dans la table
    Par namstou3 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/03/2008, 17h14
  2. Réponses: 8
    Dernier message: 28/07/2006, 14h32
  3. JDBC +sieurs requetes ou réutilisation du même ResultSet
    Par genielogiciel dans le forum JDBC
    Réponses: 3
    Dernier message: 12/01/2006, 16h22
  4. [JDBC]Boucle sur tous les éléments du ResultSet
    Par Terminator dans le forum JDBC
    Réponses: 1
    Dernier message: 22/09/2005, 19h30
  5. Réponses: 2
    Dernier message: 22/04/2005, 15h53

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