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éutiliser une variable 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
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Par défaut Réutiliser une variable ResultSet
    Bonjour à tous,

    J'ai bien compris qu'il n'était pas possible de lire plusieurs fois les résultats d'une requête écrits dans un ResultSet.
    En faisant de cette façon par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    rs = résultat de ma requête
    while (rs.next())
    {
        // on lit ce qu'il y a dans rs une première fois
    }
     
    while (rs.next())
    {
        // on lit ce qu'il y a dans rs une deuxième fois
    }
    Très bien, mais moi ce que j'aimerais faire c'est réutiliser la variable comme ça le ferait en faisant la requête dans une boucle.
    Le code en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    ResultSet rs;
    ResultSet rsassocies;
     
    // liste des comptes qu'il possède
    rs = connexion.Requete("SELECT DISTINCT idCompte FROM sassocier WHERE idClient = "+super.getReference()+";");
    // parcours de ce résultat pour avoir le nombre d'associés
    while (rs.next())
    {
        // puisque rs n'est pas réutilisable, on l'écrit dans une collection
        comptesPossedes.add(Integer.parseInt(rs.getString("idCompte")));
        rsassocies = connexion.Requete("SELECT count(idClient) as nb_associes FROM sassocier WHERE idCompte = "+Integer.parseInt(rs.getString("idCompte"))+";");
        if(rsassocies.next() && Integer.parseInt(rsassocies.getString("nb_associes")) > 1)
        {
            nbComptesAvecAssocies++;
        }
    }
    Comment est-ce que je pourrais faire avec ce rsassocies ?

    Merci.

  2. #2
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Bizarre ton bricolage.

    Déjà, prends l'habitude d'utiliser des requêtes paramétrées (preparedStatement) au lieu de former tes requêtes en concaténant du texte.

    Ensuite, avant de chercher plus loin, pourquoi pas utiliser un

    SELECT idCompte, Count(idclient)
    FROM tableMachin
    group by idcompte

    ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 36
    Par défaut
    preparedStatement hein ? Je retiens...

    Sinon, pour la requête, j'ai cherché un moment sans trouver.

    Sur la table sassocier, j'aimerai savoir le nombre de gens qui sont associés au même compte qu'un client donné. J'avoue, en une seule requête, j'ai du mal...



    Ah non, c'est bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT idCompte, count(idClient) as nb_associes
    FROM sassocier
    WHERE idCompte IN (SELECT idCompte FROM sassocier WHERE idClient = 15)
    GROUP BY idCompte;
    Ça devrait fonctionner. Je teste et je reviens pour [résolu].

    Désolé pour le dérangement.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    Regarde la classe org.apache.commons.beanutils.ResultSetDynaClass

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ArrayList results = new ArrayList(); // To hold copied list
       ResultSetDynaClass rsdc = ...;
       DynaProperty[] properties = rsdc.getDynaProperties();
       BasicDynaClass bdc =
         new BasicDynaClass("foo", BasicDynaBean.class,
                            rsdc.getDynaProperties());
       Iterator rows = rsdc.iterator();
       while (rows.hasNext()) {
         DynaBean oldRow = (DynaBean) rows.next();
         DynaBean newRow = bdc.newInstance();
         PropertyUtils.copyProperties(newRow, oldRow);
         results.add(newRow);
       }
    Cdlt

  5. #5
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Citation Envoyé par m1ckros
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    rs = résultat de ma requête
    while (rs.next())
    {
        // on lit ce qu'il y a dans rs une première fois
    }
     
    while (rs.next())
    {
        // on lit ce qu'il y a dans rs une deuxième fois
    }
    entre les 2 while il faut faire un rs.beforeFirst()
    Et LA... il te balancera une belle erreur donc tu fera


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Statement stat = con.createStatement(rs.TYPE_SCROLL_INSENSITIVE,rs.CONSUR_UPDATABLE);
    rs = stat.executeQuery(requete);
    ...

Discussions similaires

  1. réutiliser une variable ralentirait un script ?
    Par clavier12AZQSWX dans le forum Général Python
    Réponses: 2
    Dernier message: 28/01/2014, 17h53
  2. [MySQL] Réutiliser une variable dans une requête SQL
    Par marlozo dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 30/12/2006, 08h52
  3. [XSLT] Réutiliser une variable définie dans une boucle
    Par DelphLaga dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/10/2006, 16h49
  4. [XSLT] Réutiliser un contexte mémorisé dans une variable
    Par camboui dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 02/01/2006, 12h49

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