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

Collection et Stream Java Discussion :

Problème d'affichage d'une requête SQL dans un tableau


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur delphi junior
    Inscrit en
    Février 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur delphi junior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 39
    Par défaut Problème d'affichage d'une requête SQL dans un tableau
    Bonjour,
    Je suis étudiant en informatique et pour la fin d'année je doit faire 5 aplication en langage de programmation.
    Je fais une vidéothèque mais je n'arrive pas a afficher correctement dans un tableau ce que me récupère une requête SQL avec une base de donnée PosgreSQL. La requête est correcte mais lorsque je veux l'afficher dans la fenêtre seule 1 ligne est affichée.
    J'utilise donc PosgreSQL pour la base et NetBeans pour faire la partie graphique.

    voici le code :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    try 
            {			
                    String url = "jdbc:postgresql://localhost:5432/videotheque";
                    String user = "postgres";
                    String passwd = "titi30501";
     
                    Connection conn = DriverManager.getConnection(url, user, passwd);
     
                    //création d'un objet Statement pour le nombre de film
                     Statement statenb = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
                    //On compte le nombre de film
                    String query1 = "SELECT COUNT(id_film) AS nbfilm FROM Film";			
                    ResultSet result = statenb.executeQuery(query1);
                    result.first();
                    System.out.println(""+result.getInt("nbfilm")+"");
                    int nbfilm =result.getInt("nbfilm");
     
     
                     //création d'un objet Statement pour la liste des films
                        Statement state = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
                        //On va chercher tous les film pour les afficher
                        String query = "SELECT * FROM Film ORDER BY id_film";			
                        ResultSet res = state.executeQuery(query);
                        res.first();
     
                        //Les titres des colonnes
                        String  title[] = {"idfilm", "Nom", "Realisateur", "acteur principal", "genre", "Commentaire"};
                        //on insère les données dans un tableau
                        Object[][] data = {{""+res.getString("id_film")+"", ""+res.getString("nom_film")+"", ""+res.getString("realisateur")+"", ""+res.getString("acteur")+"", ""+res.getString("genre")+"", ""+res.getString("commentaire")+""}};
     
     
                        JTable tableau = new JTable(data, title);
     
                        //On ajoute notre tableau à notre contentPane dans un scroll
                        //Sinon les titres des colonnes ne s'afficheront pas ! !	
                        this.getContentPane().add(new JScrollPane(tableau));
                        this.setLocationRelativeTo(null);
                        this.setTitle("JTable");
                        System.out.println(data);
     
                    /*   
                    for(int i=1;i<=nbfilm;i++)
                    {
                       
                    }*/
     
     
            }
            catch (Exception e) 
            {
                e.printStackTrace();
            }
    Je n'arrive pas a faire fonctionner le "for" pour tout afficher cela ne change rien une seule ligne s'affiche. Cela fait 1 mois que je travaille dessus en vain. J'ai besoin d'aide (avant le 4 mars si possible).

    Merci d'avance.

    PS : je peux fournir d'autre parties de code si besoin est.

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Bonjour,

    Citation Envoyé par seremei Voir le message
    Je n'arrive pas a faire fonctionner le "for" pour tout afficher cela ne change rien une seule ligne s'affiche.
    C'est normal. D'après ce que je lis dans ton code, tu ne récupères que le premier résultat de ta requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ResultSet result = statenb.executeQuery(query1);
    result.first();
    Mako.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Si tu ne fais pas de boucle sur le ResultSet, tu ne récupéreras qu'un nombre fixe de lignes. (Ici je ne te vois en récupérer qu'une.)

    Si tu n'appelles pas next() sur le ResultSet, alors tu sais que ce ResultSet ne lit jamais autre chose que la première ligne.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Homme Profil pro
    Développeur delphi junior
    Inscrit en
    Février 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur delphi junior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 39
    Par défaut
    Merci de vos réponse, mais après modification de mon code avec votre aide voici ce que j’obtiens :

    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
     
     //création d'un objet Statement pour la liste des films
                        Statement state = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
                        //On va chercher tous les film pour les afficher
                        String query = "SELECT * FROM Film ORDER BY id_film";			
                        ResultSet res = state.executeQuery(query);
                        //res.first();
                        //Les titres des colonnes
                        String  title[] = {"idfilm", "Nom", "Realisateur", "acteur principal", "genre", "Commentaire"};
     
                        while(res.next()){
                            String id = res.getString(1);
                            String nom = res.getString(2);
                            String realisateur = res.getString(3);
                            String acteur = res.getString(4);
                            String genre = res.getString(5);
                            String commentaire = res.getString(6);
     
                           //on insère les données dans un tableau
                            Object[][] data = {{""+id+"", ""+nom+"", ""+realisateur+"", ""+acteur+"", ""+genre+"", ""+commentaire+""}};
                            JTable tableau = new JTable(data, title);
                            this.getContentPane().add(new JScrollPane(tableau));
                            //System.out.println(id+" "+nom+" "+realisateur+" "+acteur+" "+genre+" "+commentaire+".");
                        }
    Le System.out.println fonctionne, je récupère bien toute les lignes mais avec la matrice data seule 1 ligne s'affiche soit la première soit la dernière.

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Bonjour,

    Citation Envoyé par seremei Voir le message
    Le System.out.println fonctionne, je récupère bien toute les lignes mais avec la matrice data seule 1 ligne s'affiche soit la première soit la dernière.
    Le problème est que, à chaque itération, tu créés un nouveau Object[][], ainsi qu'une nouvelle JTable. Si j'ai bien compris ce que tu veux faire, il vaudrait mieux n'avoir qu'une seule JTable, et lui ajouter les données complètes (donc ne pas créer un nouveau tableau à chaque itération).

    Mako.

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Par défaut
    C'est exact,

    Il faudrait que tu déclares ta JTable soit avant, soit après la boucle. Ce que tu peux faire faire c'est :

    - exetuter la requete
    - obtenir les dimensions du resultset
    - contruire ton tableau en fonction des dimensions
    - parcourir le resultset pour insérer les données dans le tableau
    - construire la JTable avec le tableau

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

Discussions similaires

  1. Affichage d'une requête SQL dans un fichier texte
    Par EL.FARAJI dans le forum Développement Web en Java
    Réponses: 5
    Dernier message: 11/04/2011, 15h23
  2. [PHP 5.2] Affichage du résultat d'une requête SQL dans un tableau indenté
    Par ratatam25 dans le forum Langage
    Réponses: 5
    Dernier message: 07/09/2009, 16h50
  3. [SQL] affichage d'une requête sql dans un tableau
    Par benvegu dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/02/2008, 14h01
  4. Réponses: 15
    Dernier message: 11/05/2007, 15h28
  5. [MySQL] Passer une requête SQL dans un tableau
    Par phpaide dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 02/05/2006, 11h09

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