Listes doublement chainees [Résolu]

jeeb2009 75 Messages postés lundi 19 janvier 2009Date d'inscription 31 mars 2009 Dernière intervention - 19 févr. 2009 à 09:50 - Dernière réponse : jeeb2009 75 Messages postés lundi 19 janvier 2009Date d'inscription 31 mars 2009 Dernière intervention
- 23 févr. 2009 à 10:34
bonjour a tous,

je souhaite inserrer les resultats de ma requete dans une liste doublement chainees alors je ne sais comment m y prendre....
a l aide je vous en prie...
Afficher la suite 

Votre réponse

24 réponses

Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 19 févr. 2009 à 13:26
3
Merci
Salut,

m_oButtonBeforeClick est tout simplement un Listener que je déclenche avant de naviguer dans la base de données afin de permettre d'annuler l'action (d'où le getCancel).

Donc en gros :
if (m_oButtonsBeforeClick != null) {

m_oButtonsBeforeClick.actionPerformed(EVENT_NEXT);

if (m_oButtonsBeforeClick.getCancel()) {

return;

}

Ce bout de code permet de déclencher l'événément EVENT_NEXT si toutefois un listener a été enregistré, et au retour de l'événement, je teste si le cancel vaut true.

try {

m_oResultSet.next();

refresh();

}

catch (SQLException e) {

System.out.println("CConnectBar.m_btnNext_Click : Erreur lors du déplacement.");

}

Ca c'est le bout de code qui t'intéresse : je fais un next sur mon resultset global, puis je raffraîchit les contrôles liés à mon CConnectBar (par ma méthode refresh).

if (m_oButtonsClick != null) {

m_oButtonsClick.actionPerformed(EVENT_NEXT);

}

}
Ce bout de code permet de déclencher l'événement EVENT_NEXT après le click afin de notifier ce qui le veulent du clic sur le bouton.

Je vois pas trop ce que tu n'as pas pu comprendre dans le bout de code que je t'avais donné : je reprenais juste ton code et je le corrigeais pour que ca marche...

______________________________________
DarK Sidious

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 20 févr. 2009 à 17:25
3
Merci
Salut,

Et voilà le gros inconvénient de travailler avec un outil graphique pour faire ses interfaces : on ne sait pas comment cà marche et on perd un temps fou avec des choses pourtant si simple ! Encore un bon exemple de perte de temps incroyable à cause de l'utilisation d'un outil de conception d'interface graphique... Je déconseille très fortement l'utilisation de ce genre d'outils qui produisent un code tellement immaintenable qu'il est impossible de s'y retrouver quelques mois après avoir développé le projet... Bref, j'espère que ca te servira de leçon...

Il faut soit que ta classe possèdant le resultSet implémente le ActionListener (ca ne fais que 2 jours que je te dis de faire comme cà...), soit tu fais un getter de ton resultset dans ta classe principale, et tu en récupère l'instance dans la classe qui fait le actionPerformed (cf l'exemple de code que je t'ai passé ce matin...).
______________________________________
DarK Sidious

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 19 févr. 2009 à 10:52
0
Merci
Salut,

Comment veux-tu qu'on t'aide avec si peu de détails ???

Quelle requête ? Quel type de données ? Qu'est-ce que tu n'arrive pas à faire ?
______________________________________
DarK Sidious
Commenter la réponse de cs_DARKSIDIOUS
jeeb2009 75 Messages postés lundi 19 janvier 2009Date d'inscription 31 mars 2009 Dernière intervention - 19 févr. 2009 à 11:21
0
Merci
voici le script de ma table pour les differentes donnees manipuler

CREATE TABLE `contac` (
`Nom` varchar(30) NOT NULL,

`Prenom` varchar(30) NOT NULL,

`Email` varchar(40) NOT NULL,

`Pays` tinytext NOT NULL,

`CNI` bigint(15) NOT NULL,

`Telephone1` tinytext NOT NULL,

`Telephone2` tinytext,

`Telephone3` tinytext,

`Titre` tinytext,

`Entreprise_Employee` text,

`commentaire_add` text,

`date_crea` varchar(20) NOT NULL,

`date_modif` varchar(20) NOT NULL,

`Groupe` varchar(20) NOT NULL,

PRIMARY KEY (`CNI`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

//voici ma connexion te

try {Class.forName("com.mysql.jdbc.Driver");
url="jdbc:mysql://localhost/mabase";
con = DriverManager.getConnection(url, user, pass);
statmnt = con.createStatement();
results = statmnt .executeQuery("SELECT * FROM mabase")}
catch(SQLException ex){System.out.println("SQL Error:" + ex.getMessage());}
catch(Exception e) {
System.out.print("erreur1 "+e.getMessage());//récuperer le message d'erreur en cas d'erreur
}

Merci Darksidious!!
Commenter la réponse de jeeb2009
jeeb2009 75 Messages postés lundi 19 janvier 2009Date d'inscription 31 mars 2009 Dernière intervention - 19 févr. 2009 à 11:31
0
Merci
voici le script de ma table pour les differentes donnees manipuler

CREATE TABLE `contac` (
`Nom` varchar(30) NOT NULL,

`Prenom` varchar(30) NOT NULL,

`Email` varchar(40) NOT NULL,

`Pays` tinytext NOT NULL,

`CNI` bigint(15) NOT NULL,

`Telephone1` tinytext NOT NULL,

`Telephone2` tinytext,

`Telephone3` tinytext,

`Titre` tinytext,

`Entreprise_Employee` text,

`commentaire_add` text,

`date_crea` varchar(20) NOT NULL,

`date_modif` varchar(20) NOT NULL,

`Groupe` varchar(20) NOT NULL,

PRIMARY KEY (`CNI`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

//voici ma connexion te

try {Class.forName("com.mysql.jdbc.Driver");
url="jdbc:mysql://localhost/mabase";
con = DriverManager.getConnection(url, user, pass);
statmnt = con.createStatement();
results = statmnt .executeQuery("SELECT * FROM contac")}
catch(SQLException ex){System.out.println("SQL Error:" + ex.getMessage());}
catch(Exception e) {
System.out.print("erreur1 "+e.getMessage());//récuperer le message d'erreur en cas d'erreur
}

Merci Darksidious!!
Commenter la réponse de jeeb2009
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 19 févr. 2009 à 11:40
0
Merci
Salut,

Ok, t'as répondu à ma première question, mais les deux autres restent d'actualité :
Quel type de données ? Qu'est-ce que tu n'arrive pas à faire ?

Quand tu poses une question sur un forum d'entraide comme ici, c'est à toi d'être le plus explicite possible, et non à nous de te poser des questions pour réussir à t'aider...
______________________________________
DarK Sidious
Commenter la réponse de cs_DARKSIDIOUS
jeeb2009 75 Messages postés lundi 19 janvier 2009Date d'inscription 31 mars 2009 Dernière intervention - 19 févr. 2009 à 11:50
0
Merci
desole Darksidious je souhaite passer d unenregistrement a l autre sans gene...
afin de resoudre le probleme de precedent/suivant car j ai pas pu adapter ton code
"CConnectorBar"...

pour les types de donnees le script de la bd ne suffit pas??
Commenter la réponse de jeeb2009
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 19 févr. 2009 à 12:17
0
Merci
Salut,

Tu galère encore avec ton previous et next ?

Il sera bien plus efficace d'utiliser un resultSet plutôt que de lire toutes tes données pour les stocker dans une liste !!! Crois moi ! Il suffit que tu ai un millier d'enregistrements et déjà tu fera écrouler les performances, alors je te raconte pas pour un dixième de millier ou plus...

Tu avais essayé le bout de code que je t'avais donné ?
______________________________________
DarK Sidious
Commenter la réponse de cs_DARKSIDIOUS
jeeb2009 75 Messages postés lundi 19 janvier 2009Date d'inscription 31 mars 2009 Dernière intervention - 19 févr. 2009 à 12:41
0
Merci
je ne l ai pas deja compris stp jette un coup d oeil dessus....

dans ta classe CConnectorBar, voici le code du bouton previous peus tu me le commenter??/ ke represente m_oButtonsBeforeClick??
et pour moi ki utilise nebeans 6.5 est ce je dois implementer de la mm facon??

private void m_btnPrevious_Click(){
m_btnNext_Click() {
if (m_oButtonsBeforeClick != null) {
m_oButtonsBeforeClick.actionPerformed(EVENT_NEXT);
if (m_oButtonsBeforeClick.getCancel()) {
return;
}
}
try {
m_oResultSet.next();
refresh();
}
catch (SQLException e) {
System.out.println("CConnectBar.m_btnNext_Click : Erreur lors du déplacement.");
}
if (m_oButtonsClick != null) {
m_oButtonsClick.actionPerformed(EVENT_NEXT);
}
}
Commenter la réponse de jeeb2009
jeeb2009 75 Messages postés lundi 19 janvier 2009Date d'inscription 31 mars 2009 Dernière intervention - 19 févr. 2009 à 12:53
0
Merci
desole c est plutot comme ceci kelle est ta methode...

private void m_btnNext_Click() {
if (m_oButtonsBeforeClick != null) {
m_oButtonsBeforeClick.actionPerformed(EVENT_NEXT);
if (m_oButtonsBeforeClick.getCancel()) {
return;
}
}
try {
m_oResultSet.next();
refresh();
}
catch (SQLException e) {
System.out.println("CConnectBar.m_btnNext_Click : Erreur lors du déplacement.");
}
if (m_oButtonsClick != null) {
m_oButtonsClick.actionPerformed(EVENT_NEXT);
}
}
Commenter la réponse de jeeb2009
jeeb2009 75 Messages postés lundi 19 janvier 2009Date d'inscription 31 mars 2009 Dernière intervention - 19 févr. 2009 à 13:59
0
Merci
en fait je t explique bien le truc.
je recherche des contacts dans ma bd par Nom,prenom, email.. lorsque le contact set present, les differents identifiants s affichent dans les jtextfield de mon interface.....
voici de nouveau ce que je fais pour le boouton precedent a partir de ton code
ERROR:SQL Error:Before start of result set

le code:

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {

try{Class.forName("com.mysql.jdbc.Driver");
url = "jdbc:mysql://localhost/contactmanager";
con = DriverManager.getConnection(url,"root","stockaj");
st = con.createStatement();
if(jComboBox1.getSelectedItem()=="Nom"){
rs = st.executeQuery("SELECT * FROM contac_man WHERE (Nom LIKE '"+jTextField1.getText()+'%'+"')");
rs.previous();
jTextField3.setText(rs.getString(1));
jTextField4.setText(rs.getString(2));
jTextField5.setText(rs.getString(3));
jComboBox2.setSelectedItem(rs.getString(4));
jTextField2.setText(rs.getString(5));
jTextField6.setText(rs.getString(6));
jTextField7.setText(rs.getString(7));
jTextField8.setText(rs.getString(8));
jTextField9.setText(rs.getString(9));
jTextField10.setText(rs.getString(10));
jTextArea1.setText(rs.getString(11));
jComboBox3.setSelectedItem(rs.getString(14));

}

}
catch(SQLException ex){System.out.println("SQL Error:" + ex.getMessage());}
catch(ClassNotFoundException cnfe){
System.out.println(cnfe.getMessage());
}}
Commenter la réponse de jeeb2009
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 19 févr. 2009 à 14:22
0
Merci
Salut,

Ah ben là c'est clair : il te manque le test de premier enregistrement (depuis le temps que je te le dit celui là !!!) :

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                        

       try{Class.forName("com.mysql.jdbc.Driver");

            url = "jdbc:mysql://localhost/contactmanager";

            con = DriverManager.getConnection(url,"root","stockaj");

            st = con.createStatement();

             if(jComboBox1.getSelectedItem()=="Nom"){

            rs = st.executeQuery("SELECT * FROM contac_man WHERE (Nom LIKE '"+jTextField1.getText()+'%'+"')");

            if (!res.isFirst()) {
                rs.previous();

            }
            jTextField3.setText(rs.getString(1));

            jTextField4.setText(rs.getString(2));

            jTextField5.setText(rs.getString(3));

            jComboBox2.setSelectedItem(rs.getString(4));

            jTextField2.setText(rs.getString(5));

            jTextField6.setText(rs.getString(6));

            jTextField7.setText(rs.getString(7));

            jTextField8.setText(rs.getString(8));

            jTextField9.setText(rs.getString(9));

            jTextField10.setText(rs.getString(10));

            jTextArea1.setText(rs.getString(11));

            jComboBox3.setSelectedItem(rs.getString(14));

             }

          }

        catch(SQLException ex){System.out.println("SQL Error:" + ex.getMessage());}

        catch(ClassNotFoundException cnfe){

        System.out.println(cnfe.getMessage());

        }}

rs.previous();

______________________________________
DarK Sidious
Commenter la réponse de cs_DARKSIDIOUS
jeeb2009 75 Messages postés lundi 19 janvier 2009Date d'inscription 31 mars 2009 Dernière intervention - 19 févr. 2009 à 14:40
0
Merci
meme erreur generee que precedemment....

SQL ERROR: Before start of result set
Commenter la réponse de jeeb2009
jeeb2009 75 Messages postés lundi 19 janvier 2009Date d'inscription 31 mars 2009 Dernière intervention - 19 févr. 2009 à 14:49
0
Merci
autre chose a noter l execution pas a pas s arrete juste a la premiere ligne de l affichage... et le "rs" n a aucune valeur... faut il d abord le parcourir en suite faire rs.previous();???
Commenter la réponse de jeeb2009
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 19 févr. 2009 à 14:50
0
Merci
Salut,

Ben pourtant ce test permet justement d'éviter cette erreur...

essaye ceci :
try{Class.forName("com.mysql.jdbc.Driver");
            url = "jdbc:mysql://localhost/contactmanager";
            con = DriverManager.getConnection(url,"root","stockaj");
            st = con.createStatement();
             if(jComboBox1.getSelectedItem()=="Nom"){
            rs = st.executeQuery("SELECT * FROM contac_man WHERE (Nom LIKE '"+jTextField1.getText()+'%'+"')");
            rs.first();
            if (!rs.isFirst()) {
                rs.previous();
            }
            jTextField3.setText(rs.getString(1));
            jTextField4.setText(rs.getString(2));
            jTextField5.setText(rs.getString(3));
            jComboBox2.setSelectedItem(rs.getString(4));
            jTextField2.setText(rs.getString(5));
            jTextField6.setText(rs.getString(6));
            jTextField7.setText(rs.getString(7));
            jTextField8.setText(rs.getString(8));
            jTextField9.setText(rs.getString(9));
            jTextField10.setText(rs.getString(10));
            jTextArea1.setText(rs.getString(11));
            jComboBox3.setSelectedItem(rs.getString(14));

             }

          }
        catch(SQLException ex){System.out.println("SQL Error:" + ex.getMessage());}
        catch(ClassNotFoundException cnfe){
        System.out.println(cnfe.getMessage());
        }}

Sinon, est-ce que ton resultset contient bien des enregistrements ?
______________________________________
DarK Sidious
Commenter la réponse de cs_DARKSIDIOUS
jeeb2009 75 Messages postés lundi 19 janvier 2009Date d'inscription 31 mars 2009 Dernière intervention - 19 févr. 2009 à 16:14
0
Merci
oui mon result set possede ses enregistrements sinon ca markerai null...
pour avoir le coeur net j ai declare j ai fais:

String s1;

s1 = rs.getString(1); la valeur de s1 correspond bel et bien a celle presente dans ma table...

la question ke j aimerai te poser est : lorske tu fais if(!rs.isFirst()) ca veut bien dire:"si ce n est pas le premier enregistrement..." n est ce pas? alors le premier enregistrement de la Table ou le premier enregistrement du resultat de la requete??

et lorsque j execute ton code aucune erreur ne se produit mais l execution pas a pas saute l instruction

rs.previous();
Commenter la réponse de jeeb2009
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 19 févr. 2009 à 17:23
0
Merci
Salut,

En fait la fonction isFirst va tester si le resultset est positionné sur le premier enregistrement (pas le premier enregistrement de ta table mais des enregistrements résultant de l'exécution de la requête SQL). Cela permet de savoir s'il existe des enregistrements précendents ou pas.

Du coup, si tu es sur le premier enregistrement, tu ne peux plus faire de previous (sinon, exception, comme tu as pu le voir !). C'est pour cela que j'insistais sur ce test là.

Je pense que le problème dans ton code d'origine (celui de ton topic précédent avec le nullPointer), c'est que tu essaye d'accèder au resultset "rs" dans une classe qui ne le possède pas : typiquement, dans une classe qui implémente un ActionListener si tu essaye d'accèder à la variable rs qui elle est déclarée dans la classe contenant ta JFrame...
______________________________________
DarK Sidious
Commenter la réponse de cs_DARKSIDIOUS
jeeb2009 75 Messages postés lundi 19 janvier 2009Date d'inscription 31 mars 2009 Dernière intervention - 20 févr. 2009 à 11:10
0
Merci
Salut DarkSidious,

j ai toujours pas avancee avec mes boutons suivant et precedent toi tu as trouve une astuce?? ou alors si tu maitrise mieux les lites doublement chainees de grace j ai besoin de savoir comment y inserer mon resulset...et comment et afficher les donnees...

merci
Commenter la réponse de jeeb2009
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 20 févr. 2009 à 12:31
0
Merci
Salut,

Je te dis : laisse tomber l'idée des listes tu vas avoir de gros problème de performances !

Si j'ai trouvé une astuce ? Ben ca marche très bien chez moi les resulsets... Je n'aurais pas publié mon CConnectBar s'il ne marchait pas. Il faut juste comprendre qu'il faut accéder à l'instance du resulset qui est ouvert :

Test test = new Test(); // histoire d'avoir l'instance de la classe test quelque part

class Test {
   Resulset res;
   public Test() {
      tonBouton.addActionListener(new Test2());
   }
   public Resultat getRes() {
      return res;
   }
}

class Test2 implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      res.previous(); // là forcément ca va planter : NullPointerException !

     // façon de faire :
      if (!test.getRes().isFirst())
          test.getRes().previous(); // là ok ca marchera !
   }
}
______________________________________
DarK Sidious
Commenter la réponse de cs_DARKSIDIOUS
jeeb2009 75 Messages postés lundi 19 janvier 2009Date d'inscription 31 mars 2009 Dernière intervention - 20 févr. 2009 à 13:14
0
Merci
avant d effectuer le test j aimerai savoir un truc l instruction:
tonbouton.addActionPerformed(...) c est le bouton ki permet d afficher ou c est le bouton precedent???
Commenter la réponse de jeeb2009

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.