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 :

Stockage et réutilisation d'un ResultSet


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Par défaut Stockage et réutilisation d'un ResultSet
    Bonsoir,

    Je suis en train de faire l'interface graphique d'un projet en Database, et la dernière partie dudit projet est l'exécution de requêtes pour le moins assez complexes. Un exemple de requête est :
    Lister les 10 artistes qui ont le plus grand nombre de tracks apparaissant sur des compilations. Une compilation est un média (CD, Vinyl, Digital, etc) qui contient des tracks associés à plusieurs artistes (en gros pas un album).

    Mon code SQL pour cette requête est le suivant :

    create index track_medium on track(IDMedium)
    create index artistind_track on artist_track(IDTrack)

    create temporary table compilation(
    select IDMedium
    from artist_track join track using(IDTrack)
    group by IDMedium
    having count(distinct IDArtist)>1);

    create temporary table temp_tracks(
    select distinct IDTrack
    from compilation join track using(IDMedium));

    select IDArtist, ArtistName
    from temp_tracks join artist_track using(IDTrack) join artist using(IDArtist)
    group by IDArtist
    order by count(*) desc
    limit 10

    Ma question est la suivante :
    What da F ? Plus sérieusement, j'ai déjà affiché le résultat d'une requête (un simple select *) dans une JTable, mais là je ne sais pas comment faire pour une bonne grosse requête SQL comme celle-là, sachant que j'ai une autre quinzaine qui attend d'être traitée de la même manière que celle-ci à peu près.

    N'hésitez pas si besoin de plus d'infos concernant la structure de la BD ou autre.

    Une bonne soirée à tous.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 51
    Par défaut
    C'est quoi concrétement ton problème ? Tu ne veux pas récupérer toutes les colonnes que te ressort la requête mais seulement quelques une ?

    Je ne vois pas trop où est le problème..

  3. #3
    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
    la création de temporary tables ne me semble pas très propre d'un point de vue performances Les SGBD ont en général un moyen pour s'en passer et tout optimiser dans une seul requête.

    Par exemple, sous oracle, tu as le with (.......) as. Qui a l'avantage de laisser l'opportunité au SGBD de tenir compte, dès le départ, de ton limit et des jointures additionnelles.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    with compilation as (
    select IDMedium
    from artist_track join track using(IDTrack)
    group by IDMedium
    having count(distinct IDArtist)>1),
    temp_tracks as (
    select distinct IDTrack
    from compilation join track using(IDMedium))
    select IDArtist, ArtistName
    from temp_tracks join artist_track using(IDTrack) join artist using(IDArtist)
    group by IDArtist
    order by count(*) desc
    limit 10

    Pour le reste, moi non plus, je ne vois pas quel est ton problème

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Par défaut
    En gros mon problème était d'afficher le résultat de deux requêtes totalement différentes dans une seule JTable i.e. pour un artiste entré par le user, afficher tous ses albums et les genres auquel il appartient.

    freeway57 Ma demande n'était en effet pas très claire mais j'avais une deadline assez proche et il se faisait assez tard donc ..
    Ceci dit j'ai résolu le problème, même si c'était pas très joli joli niveau esthétique. J'ai utilisé des ResultSet pour chaque requête (à part pour les créations d'index bien sûr) et affiché le tout dans une JTable.

    tchize_ En se partageant les tâches, je ne m'occupais que de l'interface graphique. L'implémentation des requêtes était faite par mon binôme, qui utilisait MySQL et pas Oracle. Mais merci de l'input, je suis sûr que ça servira très prochainement

  5. #5
    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 ça peux rentrer ensemble dans une seule table, ça peut être produit par une seule requête SQL

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    si ça peux rentrer ensemble dans une seule table, ça peut être produit par une seule requête SQL
    Oui j'imagine bien, mais vu que j'avais jamais fait de GUI database avant j'y suis un peu allé à la bourrin côté implémentation, mais tout est bien on a eu 96% donc all good (le code n'était pas inclus dans le rendu).

    Aussi pour revenir à ta réflexion, tu dis qu'on peut mettre 2, 3 tables temporaires + la requête finale dans une seule String et ça fonctionnerait ?

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

Discussions similaires

  1. stockage et réutilisation de données copiées
    Par aldebert dans le forum VBA Access
    Réponses: 1
    Dernier message: 07/05/2015, 19h59
  2. Réponses: 3
    Dernier message: 30/04/2013, 10h10
  3. HSQL ResultSet stockage VM
    Par javatar dans le forum Général Java
    Réponses: 5
    Dernier message: 02/05/2011, 16h41
  4. Réutiliser une variable ResultSet
    Par m1ckros dans le forum JDBC
    Réponses: 4
    Dernier message: 20/05/2009, 14h19
  5. JDBC +sieurs requetes ou réutilisation du même ResultSet
    Par genielogiciel dans le forum JDBC
    Réponses: 3
    Dernier message: 12/01/2006, 17h22

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