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 :

SQL sur ResultSet ?


Sujet :

JDBC Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut SQL sur ResultSet ?
    Bonjour,
    peut-on faire une requête SQL sur un ResultSet ?
    je m'explique :
    j'ai 3 tables T1, T2 et T3 table de jointure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    T1(id1, a,b)
    T2(id2, c,d)
    T3(id1,id2)
    je veux chercher des données dans T1 et T2 mais a partir de T3 :
    a partir de ce resultat je prend l'id1 pour rechercher dans T1 et id2 dans T2
    je veux faire une requete genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from T1
    where id1 in (select id1 from T3)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from T2
    where id2 in (select id2 from T3)[
    au lieu de faire 2 fois la même requête, j'ai stocker le résultat de T3 dans resultSet,
    je veux a partir de ce résultat recherche dans T1 et T2 ?
    existe-il une solution ? sinon comment peut-on proceder ?
    merci

  2. #2
    Membre chevronné
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Par défaut
    Bonjour,

    A quoi sert la requête
    ?
    Si vous la supprimez, cela fait une requête de moins ... et vous n'avez plus qu'à lancer les deux requêtes l'une après l'autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from T1
    where id1 in (select id1 from T3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from T2
    where id2 in (select id2 from T3)
    A moins que ce que vous souhaitez faire soit ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T1.*, T2.*
    FROM T1, T1, T3
    WHERE T1.id1 = T3.id1
    AND T2.id2 = T3.id2

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut
    j'ai résumé le truc ! désolé !
    A quoi sert la requête
    Code :
    select * from T3
    dans cette requete il y a une condition where je l'ai omis volontairement.
    j'ai besoin d'une sous table de la table T3, et partir de ça je fait des recherche sur T1 et T2 à partir des identifiants stockés dans T3 !
    c pourquoi j'ai besoin de faire une requete sur le resultSet de la table T3

  4. #4
    Membre chevronné
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Par défaut
    Quelles sont les requêtes exactes que vous souhaitez ?

    Ceci ne convient pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.*, T2.*
    FROM T1, T1, T3
    WHERE T1.id1 = T3.id1
    AND T2.id2 = T3.id2
    AND VOTRE CONDITION SUPPLEMENTAIRE sur T3
    ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut
    je pense pas !
    par ce que j'ai besoin d'archiver ces données là dans 3 autre tables similaire aux précédentes,
    je récupère un résultat de la table T3 qui contient les données à archiver
    et à partir de ça pour chaque identifiant id1 trouvé dans le résultat, je prend la ligne correspondante dans T1 et je l'a mis dans archi_T1,
    pareil pour T2
    et enfin le resultat de T3 je le mis dans archi_T3

  6. #6
    Membre chevronné
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Par défaut
    Donc en tout ça vous fait 6 requêtes (3 de sélection et 3 d'insertion) ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut
    normalement oui,
    mais pour la requête sur T3, je veux pas la faire 2 fois
    c pourquoi j'ai besoin d'utiliser le resultset !

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut
    ma questio !!!!
    est-il possible d'interroger le resultSet avec un requête sql ?

  9. #9
    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
    Si je comprends bien, tu veux faire quelque chose comme ça
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    PreparedStatement pstmt0 = connection.prepareStatement("select id1, id2 from T3 where ...?...");
    PreparedStatement pstmt11 = connection.prepareStatement("insert into Arch_T1 select * from T1 where id1=?");
    PreparedStatement pstmt12 = connection.prepareStatement("delete from T1 where id1=?");
    PreparedStatement pstmt21 = connection.prepareStatement("insert into Arch_T2 select * from T2 where id2=?");
    PreparedStatement pstmt22 = connection.prepareStatement("delete from T2 where id2=?");
    PreparedStatement pstmt31 = connection.prepareStatement("insert into Arch_T3 values(?, ?)");
    PreparedStatement pstmt32 = connection.prepareStatement("delete from T3 where id1=? and id2=?");
     
    ResultSet rs1 = pstmt0.executeQuery();
    pstmt0.set ??? <- en fonction de la clause where
     
    while (rs1.next())
    {
        int id1 = rs1.getInt(1);
        int id2 = rs1.getInt(2);
     
        pstmt11.setInt(1, id1);
        pstmt11.execute();
        pstmt12.setInt(1, id1);
        pstmt12.execute();
     
        pstmt21.setInt(1, id2);
        pstmt21.execute();
        pstmt22.setInt(1, id2);
        pstmt22.execute();
     
        pstmt31.setInt(1, id1);
        pstmt31.setInt(2, id2);
        pstmt31.execute();
        pstmt32.setInt(1, id1);
        pstmt32.setInt(2, id2);
        pstmt32.execute();
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre chevronné
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Par défaut
    Que pensez-vous de ceci pour utiliser votre resultSet ?
    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
    17
    18
    19
    20
    21
    22
    PreparedStatement preparedStatementT3 = connection.prepareStatement("SELECT ID1, ID2 FROM T3 WHERE ...");
    ResultSet resultSetT3 = preparedStatementT3.executeQuery();
    if (resultSetT3 != null && resultSetT3.next()) {
      StringBuffer requeteBaseT1 = new StringBuffer("SELECT * FROM T1 WHERE ID1 IN (");
      StringBuffer requeteBaseT2 = new StringBuffer("SELECT * FROM T2 WHERE ID2 IN (");
      while (!resultSetT3.isLast()) {
        requeteBaseT1.append(resultSetT3.getInt("ID1"));
        requeteBaseT1.append(",");
        requeteBaseT2.append(resultSetT3.getInt("ID2"));
        requeteBaseT2.append(",");
        resultSetT3.next();
      }
      requeteBaseT1.append(resultSetT3.getInt("ID1"));
      requeteBaseT1.append(")");
      requeteBaseT2.append(resultSetT3.getInt("ID2"));
      requeteBaseT2.append(")");
      resultSetT3.close();
      PreparedStatement preparedStatementT1 = connection.prepareStatement(requeteBaseT1);
      ResultSet resultSetT1 = preparedStatementT1.executeQuery();
      PreparedStatement preparedStatementT2 = connection.prepareStatement(requeteBaseT2);
      ResultSet resultSetT2 = preparedStatementT2.executeQuery();
    }

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/06/2010, 10h57
  2. Réponses: 2
    Dernier message: 03/05/2004, 12h13
  3. Réponses: 7
    Dernier message: 21/04/2004, 17h16
  4. Commande d'exécution d'une procedure stockée SQL sur vb
    Par tseg dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/11/2003, 12h47
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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