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 :

remplir jlist a partir d'un serveur


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 57
    Points : 46
    Points
    46
    Par défaut remplir jlist a partir d'un serveur
    bonjour, je développe un chat en java, et je veux que le client dés qu'il s'authentifie,il récupère la liste des gens connectés depuis le serveur, en interrogeant la BD sur le serveur et voir si le statut est égale à c (connecté), je sais que c'est pas la meilleur façon, mais c'est tous ce que j'arrive à faire, le problème c'est que j'arrive pas a récupérer cette liste, et
    lorsque j'affiche la liste au niveau client avec: System.out.println("listPseudo: "+ dlm);
    le resultat est: listPseudo: [taoufik, taoufik, taoufik, taoufik, taoufik, taoufik, taoufik, taoufik, taoufik, taoufik, taoufik, taoufik, taoufik, taoufik, taoufik, taoufik, taoufik, taoufik, taoufik]
    juste le dernier element qui s'affiche en infini
    , voici le code, et merci pour votre aide.

    code serveur:

    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
    Thread threadlistpseudo=new Thread()
                        {
                            public PrintWriter out=null;
                            public BufferedReader in=null;
                            public ServerSocket sEcoute=null;
                            public Socket sService=null;
     
                            public void run()
                            {
                                ////////repondre a la requete du client pour lui communiquer la liste des pseudo
                                try{
                                    while(true)
                                    {
                                        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                                        con = DriverManager.getConnection(url);
                                        stm = con.createStatement();
                                        sEcoute =new ServerSocket(3500);
                                        sService=sEcoute.accept();
                                        out=new PrintWriter(sService.getOutputStream(),true);
                                        in=new BufferedReader(new InputStreamReader(sService.getInputStream()));
     
                                        String query=in.readLine();                                                                 rst=stm.executeQuery(query);
                                        rst=stm.executeQuery(query);
                                        while(rst.next())
                                        {
                                            out.write(rst.getString("login")+ "\r\n");
                                            out.flush();
                                        }
                                        out.write("STOP\r\n");
                                        out.flush();
                                        sEcoute.close();
                                    }
                                }catch(Exception ex){System.out.println(ex.getMessage());}
                            }
                        };
                        threadlistpseudo.start();
    code client:

    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
    public void windowOpened(java.awt.event.WindowEvent e) {
                //requete pour demander la liste des connectés depuis le serveur en verifiant le statut dans la base de données si egale à 'c'
                    try {
     
                        String req1="select login from authentification where state='c'";
                        sClient =new Socket("localhost",3500);
                        out=new PrintWriter(sClient.getOutputStream(),true); 
                        out.write(req1+ "\r\n"); 
                        out.flush();
     
                        in=new BufferedReader(new InputStreamReader(sClient.getInputStream()));
                        String req=in.readLine();
                        DefaultListModel dlm=new DefaultListModel();
     
                        while(req.compareTo("STOP")!=0)
                        { 
                            lpseudo.setModel(dlm);
                            dlm.addElement(req);            
                            System.out.println("listPseudo: "+ dlm);                
                        }
                        sClient.close();
     
                    } catch (Exception ex) {System.out.println(ex.getMessage());
                    }
                }

  2. #2
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Dans ton code Client ton while est toujours vrai car rep ne change jamais de valeur, la variable garde toujours le contenue de la première ligne de ton fichier.

    Correction possible :

    rajoute la ligne :
    rep=in.readLine() ;
    dans le while et en teste du while tu met (rep != null)

  3. #3
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 57
    Points : 46
    Points
    46
    Par défaut socket et jdbc
    merci pour votre aide, j'ai changé le while comme vous avez dis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while(req!=null)
                        { 
                            req=in.readLine();
                            lpseudo.setModel(dlm);
                            dlm.addElement(req);            
                            System.out.println("listPseudo: "+ dlm);                
                        }
    le resultat est:

    listPseudo: [user1, user2]
    listPseudo: [user1, user2, user3]
    listPseudo: [user1, user2,user3,user4]

    mais il me manquent toujours un enregistrement, c'est pas le dernier n'est le premier, mais à chaque fois un enregistrement aléatoire manque

  4. #4
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    ton code devrai ressemblé a cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    in=new BufferedReader(new InputStreamReader(sClient.getInputStream()));
    String req=in.readLine();
    DefaultListModel dlm=new DefaultListModel();
    //tu ajoute un seul model
    lpseudo.setModel(dlm);
    while(req!=null)
    { 
           dlm.addElement(req);            
           System.out.println("listPseudo: "+ dlm);                
           rep=in.readLine();
    }

  5. #5
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 57
    Points : 46
    Points
    46
    Par défaut socket et jdbc
    j'ai essayé avec ce code mais il y a toujours un enregistrement qui manque, c'est pas le dernier n'est le premier mais un enregistrement aléatoire

Discussions similaires

  1. remplir jList a partir d'une base de données
    Par Taoufik109 dans le forum Composants
    Réponses: 2
    Dernier message: 24/11/2008, 12h09
  2. Backup d'un PC Client a partir d'un serveur
    Par Sendo dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 22/05/2006, 17h41
  3. remplir une liste à partir d'une liste
    Par LeXo dans le forum Access
    Réponses: 7
    Dernier message: 14/04/2006, 12h29
  4. comment remplir un jTable à partir d'un fichier texte
    Par @yoyo dans le forum Composants
    Réponses: 1
    Dernier message: 16/03/2006, 11h54
  5. Remplir une grille à partir d'un arbre
    Par phplive dans le forum Composants VCL
    Réponses: 1
    Dernier message: 04/08/2005, 17h41

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