Bonjour,

Je me suis lancé dans le java pour mettre un point une petite application pour m'aider à gérer mon stock de livres. J'utilise donc les différents tuto pour intégrer les fondamentaux.

Là je suis sur les concepts de DAO et de abstracttablemodel, dans l'objectif de faire afficher une liste de livres à partir d'un mot clé dans un champ de recherche. Cela fonctionne sans modele DAO et avec un defauttablemodel, mais j'aimerai comprendre ce concept, pour avoir les bons réflexes d'optimisation.

Est ce qu'il est pertinent de l'utiliser même pour un table de faible complexité ? J'ai vu dans les tutos, qu'il fallait aussi construire une classe *dao, c'est donc là à priori, que je dois faire ma requête... mais à ce moment là, puis je récupérer la variable de mon panel ?

J'ai une erreur sur mon model qui dit que "the method getTitre() is undefined for the type object", j'ai aussi du mal a comprendre ou déclarer cette même méthode.

Je vous remercie
Bien cordialement

Le Panel du champ de recherche :
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package com.pl.app;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
 
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
 
public class PanelConsult extends JPanel {
 
	  ArrayList t1=new ArrayList();
	  ArrayList t2=new ArrayList();
	  ArrayList t3=new ArrayList();
      ArrayList t4=new ArrayList();
	  ArrayList t5=new ArrayList();
	  ArrayList t6=new ArrayList();
      ArrayList t7=new ArrayList();
	  ArrayList t8=new ArrayList();
	  ArrayList t9=new ArrayList();
	  DefaultTableModel model;
	  JScrollPane scroll=new JScrollPane();
	  JTable tableau =null;
 
	private JTextField jTextField1;
	private JButton jButton1;
	private JLabel jLabel1;
	private JPanel panelc = new JPanel();
 
	public PanelConsult() {
   	jTextField1 = new JTextField();
   	jLabel1 = new JLabel();
   	jButton1 = new JButton();
 
   	jLabel1.setText("Votre recherche");
   	jButton1.setText("Ok");
   	jTextField1.setText("Recherche");
 
    GroupLayout layout = new GroupLayout(panelc);
    panelc.setLayout(layout);
    add(panelc);
	layout.setAutoCreateGaps(true);
	layout.setAutoCreateContainerGaps(true);
 
       layout.setHorizontalGroup(
           layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
           .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
               .addContainerGap()
               .addComponent(jLabel1)
               .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
               .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE)
               .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
               .addComponent(jButton1)
               .addContainerGap(192, Short.MAX_VALUE))
       );
       layout.setVerticalGroup(
           layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
           .addGroup(layout.createSequentialGroup()
               .addContainerGap()
               .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                   .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                   .addComponent(jLabel1)
                   .addComponent(jButton1))
               .addContainerGap(277, Short.MAX_VALUE))           
       );
 
       jButton1.addActionListener(new ActionListener() {
           @Override
           public void actionPerformed(ActionEvent e) {
               //Shows pnlFirst
 		      ResultSet resultSet = null;
 
        	   try {
        		   //Variable contenant le titre/auteur/ean à rechercher
        		   String rqt = jTextField1.getText();
        		   //Préparation de l'objet statement
        		   Statement statement = Connecteur.getInstance().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);;
 
        		      //Création d'un objet Statement
        		      ResultSet result = statement.executeQuery("select * from baseoca where Titre like '%" + rqt + "%' OR Auteur LIKE '%" + rqt + "%' OR EAN LIKE '%" + rqt + "%' ");
        		      while(result.next())
 
        		         {				  				
        			     t1.add(result.getString("Titre"));
        		         t2.add(result.getString("Auteur"));
        		         t3.add(result.getString("Editeur"));
        	             t4.add(result.getString("EAN"));
        			     t5.add(result.getString("Etat"));
        		         t6.add(result.getString("Stock"));
        		         t7.add(result.getString("Prix"));
        	             t8.add(result.getString("Etagere"));
        		         }
 
        		        //resultat.getconn.close(); 
        		        }catch(SQLException f) { 
        			    	  f.printStackTrace(); 
        		    	 }
 
        	                  model=new DefaultTableModel(){
        	       	          public boolean isCellEditable(int row, int col){ 
        	          		  if (col==0) {return false;} 
        	          		   else {return true; }
 
        	          	     }
        	              };            
        	            model.addColumn("   titre  ",t1.toArray());
        	            model.addColumn(" auteur ",t2.toArray());
        	            model.addColumn(" editeur ",t3.toArray());
        	            model.addColumn("   EAN  ",t4.toArray());
        	            model.addColumn(" Etat ",t5.toArray());
        	            model.addColumn("   Stock  ",t6.toArray());  
        	            model.addColumn(" Prix ",t7.toArray());
        	            model.addColumn("   Etagere  ",t8.toArray());  
        		        tableau = new JTable(model);
 
        				scroll.setBounds(20,20,700,400);
        				scroll.setViewportView(tableau);
        				add(tableau);
        				validate();
           }
       });
 
	 }
}
Le modele
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
package com.pl.app;
import java.util.ArrayList;
import java.util.List;
 
import javax.swing.table.AbstractTableModel;
 
public class Consultmodel extends AbstractTableModel {
 
	private final String[] entetes = { "Titre", "Auteur", "Editeur", "EAN", "Etat", "Stock", "Prix", "Etagere" };
	private final List Livres = new ArrayList();
 
	@Override
	public int getColumnCount() {
		return entetes.length;
 
	}
 
	@Override
	public String getColumnName(int columnIndex) {
		return entetes[columnIndex];
	}
 
	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return 0;
	}
 
    @Override
    public Object getValueAt(int row, int column) {
        switch (column) {
        case 0:
            return Livres.get(row).getTitre();
        case 1:
            return Livres.get(row).getAuteur();
        case 2:
            return Livres.get(row).getEditeur();
        case 3:
            return Livres.get(row).getEAN();
        case 4:
            return Livres.get(row).getEtat();
        case 5:
            return Livres.get(row).getStock();
        case 6:
            return Livres.get(row).getPrix();
        case 7:
            return Livres.get(row).getEtagere();
        default:
            return "";
        }
    }
}
Ma classe pour la table ciblée
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
package com.pl.app;
 
public class Baseoca {
  //ID
  private int ocaid = 0;
  //Titre du livre
  private String Titre = "";
  //Auteur du livre
  private String Auteur = "";
//Editeur du livre
  private String Editeur = "";
  //Numéro EAN
  private long EAN = 0;
  //Etat du livre
  private String Etat = "";
//Stock en boutique du livre
  private String Stock = "";
//Prix de l'ouvrage
  private float Prix = 0;
//Etagere ou est rangée l'ouvrage
  private String Etagere = "";
 
  public Baseoca(int ocaid, String Titre, String Auteur, String Editeur, long EAN, String Etat, String Stock, float Prix,String Etagere) {
    this.ocaid = ocaid;
    this.Titre = Titre;
    this.Auteur = Auteur;
    this.Editeur = Editeur;
    this.EAN = EAN;
    this.Etat = Etat;
    this.Stock = Stock;
    this.Prix = Prix;
    this.Etagere = Etagere;
  }
  public Baseoca(){};
 
  public int getocaid() {
    return ocaid;
  }
 
  public void setocaid(int ocaid) {
    this.ocaid = ocaid;
  }
 
  public String getTitre() {
    return Titre;
  }
 
  public void setNom(String Titre) {
    this.Titre = Titre;
  }
 
  public String getAuteur() {
    return Auteur;
  }
 
  public void setAuteur(String Auteur) {
    this.Auteur = Auteur;
  }   
}