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

AWT/Swing Java Discussion :

jprogressbar sur ResultSet


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Par défaut jprogressbar sur ResultSet
    Bonjour!!

    Je voudrais savoir comment créer une Jprogressbar sur le contenu d'un ResultSet:

    L'idée est que j'affiche des données provenant d'une base de données et je voudrais que la barre avance en temps réel à chaque fois qu'il y a un nouvel enregistrement dans le ResultSet (sachant que je connais exactement le nobre d'enregistrement qu'on devrait avoir à la fin.

    N'hésitez pas à me demander plus d'explication si ce n'est pas clair!

    Merci pour votre aide!!

  2. #2
    Membre chevronné
    Avatar de Orian
    Inscrit en
    Août 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Août 2006
    Messages : 372
    Par défaut
    Tu prend ta progressBar, tu lui met le nombre d'enregistrement en valeur maximale, 0 en minimale et tu fait +1 à chaque fois qu'un enregistrment est traité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    JProgressBar progress = new JProgressBar();
     
            progress.setMaximum(nbrRec);
            progress.setMinimum(0);
            // traitement de l'enregistrement
            progress.setValue(progress.getValue()+1);

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Par défaut
    Salut!

    J'ai suivi ton conseil mais la barre ne progresse que si j'enlève le test sur le traitement.

    Je t'envoie mon code avec la partie test en gras:si quelqu'un a une idée sur l'origine du problème n'hésitez pas. Merci bcp!!

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    
    package testt
    
    import javax.swing.*;
    import java.awt.*;
    import java.sql.DriverManager;
    import java.sql.*;
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class test extends JFrame{
    JProgressBar b;
    
    public test(){
    super("ma barre");
    this.setBounds(200,200,200,50);
    b=new JProgressBar(0,50);
    this.getContentPane().add(b);
    this.setVisible(true);
    Thread t=new ThreadAvanceBarre(b);
    t.start();
    }
    
    
    public static void main(String args[]){
    new test();
    }
    //La classe qui correspond au thread pour faire avancer la barre	
    class ThreadAvanceBarre extends Thread {
    JProgressBar barre;
    
    
    public ThreadAvanceBarre(JProgressBar b){
    barre=b;
      
    }
    
    public void run(){
      
          // Charger le pilote Oracle
                try {
                  DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
          
                  // Connexion à la base de données
                  Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@127.0.0.1:1521:fegte", "user", "password");
          
                  // Requête SQL
                  //Création d'un objet requête
                  Statement stmt = conn.createStatement();
                  
              final Statement stmt1 = conn.createStatement();
                  //Envoyer la requête et récupérer le résulatat
                  ResultSet rset = stmt.executeQuery("select count(*) from fastpa where nolan=2");
          
                  // Affichage du résultat
                  while (rset.next()) {
                    
                    final String max = rset.getString(1);
                    
                    int maxx=Integer.parseInt(max);
          
                    System.out.println(max);
          
                    barre.setMaximum(maxx);
                    barre.setMinimum(0);
                    
                    
                      try {
                        //sleep(50);
                      }
                      catch (Exception e) {
                        System.err.println(e);
                      }
                      
                      /*** Traitement de test sur la Jprogressbar ***/
                      Timer minuteur = new Timer();
                      TimerTask tache = new TimerTask() {
                public void run()  {
                      //ResultSet rset1 = null;
                      try {
                      ResultSet rset1 = stmt1.executeQuery("select * from fstcrd where dafin is not null");
                        while (rset1.rowInserted())
                        {
                          System.out.println("test");
                         // barre.setValue(barre.getValue() + 1);
                        }
                      }                  catch (SQLException ex) {
                      }
                  }
              };
              minuteur.schedule(tache, 0, 100);
    
                  }
                }
    
             catch (SQLException ex) {
             }
    
             
    }//fin run
    }
      }//fin classe

  4. #4
    Membre éclairé Avatar de puybaret
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 61
    Par défaut
    Hum... la modification de ta barre de progression doit s'effectuer dans le Dispatch Thread. Le plus simple dans ton test est d'utiliser la classe javax.swing.Timer au lieu java.util.Timer, car le timer de Swing exécute les appels aux méthodes actionPerformed des timers dans le Dispatch Thread.

  5. #5
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Par défaut
    Tu fais rset1.rowInserted() alors que ta requête est un select ??

    Es tu certain de ne pas devoir utiliser rset1.next() plustot ?

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Par défaut
    J'ai essayé le rset.next() mais le problème est que les données de ma base proviennent d'un programme qui tourne en arrière plan et que je veux suivre son fonctionnement acec la jprogressbar et donc avec le rset.next() la jprogressbar se remplit avant la fin du programme (le programme n'a pas encore terminé l'insertion dans la base!!)

    Si quelqu'un a une idée:elle sera la bienvenue.

    Merci!!!

  7. #7
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Par défaut
    Si je comprends bien tu as un programme en "batch" qui fait les insert en db (dont tu connais le nombre, pour l exemple disons 50 insert).

    Avec ton applis tu veux indiquer via une progress bar ou tu en es dans les insert ( 20/50 puis 30/50 jusqu'à 50/50)

    Peux tu me dire si j'ai bien compris le problème stp avant de proposer une solution ?

Discussions similaires

  1. Exception inattendue : getString() sur Resultset
    Par rastaferraille dans le forum Développement Web en Java
    Réponses: 8
    Dernier message: 20/09/2010, 17h00
  2. SQL sur ResultSet ?
    Par rimas2009 dans le forum JDBC
    Réponses: 9
    Dernier message: 16/06/2010, 22h59
  3. OutOfMemoryError: Java heap space sur ResultSet
    Par SuperFoieGras dans le forum Langage
    Réponses: 14
    Dernier message: 03/09/2008, 17h38
  4. renseignement sur ResultSet et Statement
    Par baptwo dans le forum JDBC
    Réponses: 2
    Dernier message: 28/08/2006, 14h30
  5. Erreur sur ResultSet : forward-only ???
    Par Yaz dans le forum JDBC
    Réponses: 4
    Dernier message: 06/07/2005, 15h33

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