Salut!

Je voudrais savoir comment reproduire le fonctionnement d'un trigger mais dans mon application java: c'est à dire que dès qu'il y a insertion d'une nouvelle ligne dans ma base de données par un programme qui tourne en arrière plan, cette ligne sera immédiatement affichée dans ma jtable.

J'ai utilisé un timer qui répète toute les n secondes la connexion à la base de donnée et la requête SELECT et dont le fonctionnement a réactualisé l'affichage de ma jtable mais s'il y a des nouvelles insertions dans la base pendant que l'application est en cours d'exécution ça ne marche que si je ferme l'application et je la réexécute et non en temps réel!!

De plus j'ai vérifié et le programme marche bien sur la console mais c'est au niveau de l'affichage que ça bloque!!

svp aidez moi c'est vraiment urgent!!

Merci!!

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
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
package oracle_cnn;
 
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.Dimension;
import java.sql.*;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
import java.util.Timer;
import java.util.TimerTask;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import com.sun.tools.doclets.standard.tags.SimpleTaglet;
import com.sun.corba.se.ActivationIDL.Server;
 
 
 
 
 
class test extends JPanel implements TableModelListener
{
 
public void tableChanged(TableModelEvent e)
{ }
 
public static void main(String[] argv) throws SQLException {
 
Timer minuteur = new Timer();
 
//nouvelle fenêtre
final JFrame f = new JFrame("Application");
 
 
TimerTask tache = new TimerTask() {
public void run() {
 
f.setSize(1200, 1200);
JPanel pannel = new JPanel();
 
JTabbedPane onglets = new JTabbedPane(SwingConstants.TOP);
 
/*********************************************************************************************/
/*****barre de menu****/
 
/* Création des composants */
 
 
JPanel panel1= new JPanel();
/* Bar de menu */
JMenuBar menu_bar1 = new JMenuBar();
/* différents menus */
JMenu menu1 = new JMenu("Fichier");
JMenu menu2 = new JMenu("Aide");
/* differents choix de chaque menu */
JMenuItem generalites = new JMenuItem("Généralités");
JMenuItem quitter = new JMenuItem("Quitter");
JMenuItem aide = new JMenuItem("Aide");
 
/* Ajout de composants aux conteneurs */
 
f.getContentPane().add(panel1,"South");
/* Ajouter les choix au menu */
menu1.add(generalites);
menu1.add(quitter);
menu2.add(aide);
 
/* Ajouter les menu sur la bar de menu */
menu_bar1.add(menu1);
menu_bar1.add(menu2);
/* Ajouter la bar du menu à la frame */
f.setJMenuBar(menu_bar1);
 
 
/* clic sur le choix Démarrer du menu fichier */
generalites.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JFrame frame1= new JFrame("Présentation de l'application");
JPanel panel2= new JPanel();
JLabel texte = new JLabel() ;//On crée notre objet
texte.setPreferredSize(new Dimension(250,25)) ;//On lui donne une taille
texte.setText("................."); //On lui donne un texte
panel2.add(texte);//On l'ajoute au container
frame1.getContentPane().add(panel2);
frame1.setResizable(true);
frame1.setSize(200,200);
frame1.show();
frame1.setLocationRelativeTo(null);
}
});
/* clic sur le choix Fin du menu fichier */
aide.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JFrame frame2= new JFrame("Aide");
JPanel panel3= new JPanel();
JLabel texte = new JLabel() ;//On crée notre objet
texte.setPreferredSize(new Dimension(250,25)) ;//On lui donne une taille
texte.setText("................."); //On lui donne un texte
panel3.add(texte);//On l'ajoute au container
 
 
 
frame2.getContentPane().add(panel3);
frame2.setResizable(true);
frame2.setSize(200,200);
frame2.show();
frame2.setLocationRelativeTo(null);}});
 
quitter.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}});
 
 
/*****************************************************************************************/
/**** Connexion à la base *****/
 
// 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:ubixstg", "user", "Password");
 
// conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
 
 
//Création d'un objet requête
Statement stmt = conn.createStatement ();
 
Statement stmt1 = conn.createStatement ();
 
Statement stmt2 = conn.createStatement ();
 
Statement stmt4 = conn.createStatement ();
 
Statement stmt3 = conn.createStatement ();
//Envoyer la requête et récupérer le résultat
ResultSet rset1 = stmt.executeQuery ("select col from tab1");
 
ResultSet rset2 = stmt1.executeQuery ("select col from tab2");
 
ResultSet rset5 = stmt2.executeQuery ("select col from tab3");
 
ResultSet rset4 = stmt3.executeQuery ("select col from tab4");
 
ResultSet rset6 = stmt4.executeQuery ("select col from tab5");
 
 
/*******************************************************************************/
/*** Affichage résultat requête 1 dans la table 1 ***/
 
Vector values = new Vector();
int i=1;
while(rset1.next() & rset2.next()) //& rset3.next())
{
 
 
Vector tab1 = new Vector();
tab1.add("Proc"+i); //on met le nom exact de la colonne affichée dans la base
//à refaire pour les autres colones
tab1.add(rset1.getString("col1"));
tab1.add(rset2.getString("col2"));
//tab1.add(rset3.getString("col3"));
values.addElement(tab1);
i++;
}
Vector names= new Vector();
 
 
names.addElement("titre1");
//a refaire pour plus de colone
names.addElement("titre2");
names.addElement("titre3");
names.addElement(titre4");
 
DefaultTableModel model = new DefaultTableModel (values,names){
public boolean isCellEditable(int iRowIndex, int iColumnIndex)
{
return false;
}
};
 
JTable tab1 = new JTable(model);
 
tab1.setPreferredScrollableViewportSize(new Dimension(800, 800));
 
tab1.getTableHeader().setReorderingAllowed(false);
 
/****************************Affichage de la table2***********************************************/
 
Vector values1 = new Vector();
 
int j=1;
while(rset4.next())
{
Vector tab2 = new Vector();
tab2.add("Proc"+j);
tab2.add("");//rset1.getString("col1")); //on met le nom exact de la colonne affichée dans la base
//à refaire pour les autres colones
tab2.add("");//rset1.getString("col2"));
//tab2.add(rset4.getString("col3"));
values1.add(tab2);
j++;
}
Vector names1= new Vector();
 
 
names1.addElement("titre1");
//a refaire pour plus de colone
names1.addElement("titre2");
names1.addElement("titre3");
names1.addElement("titre4");
 
DefaultTableModel model1 = new DefaultTableModel (values1,names1){
public boolean isCellEditable(int iRowIndex, int iColumnIndex)
{
return false;
}
};
 
 
JTable tab2 = new JTable(model1);
 
tab2.setPreferredScrollableViewportSize(new Dimension(800, 800));
 
tab2.getTableHeader().setReorderingAllowed(false);
 
/****************************Affichage de la table3***********************************************/
 
Vector values2 = new Vector();
int k=1;
while(rset5.next() & rset6.next())
{
Vector tab3 = new Vector();
tab3.add("Proc"+k);
tab3.add(rset5.getString("col1"));
//on met le nom exact de la colonne affichée dans la base
//à refaire pour les autres colones
tab3.add(rset6.getString("col2"));
tab3.add("");//rset1.getString("col3"));
values1.add(tab2);
k++;
 
values2.add(tab3);
}
Vector names2= new Vector();
 
 
names2.addElement("titre1");
//a refaire pour plus de colone
names2.addElement("titre2");
names2.addElement("titre3");
names2.addElement("titre4");
 
DefaultTableModel model2 = new DefaultTableModel (values2,names2){
public boolean isCellEditable(int iRowIndex, int iColumnIndex)
{
return false;
}
};
 
 
JTable tab3 = new JTable(model2);
 
tab3.setPreferredScrollableViewportSize(new Dimension(800, 800));
 
tab3.getTableHeader().setReorderingAllowed(false);
/*******************************************************************************/
 
//conteneur du premier onglet
JPanel onglet1 = new JPanel();
JLabel titreOnglet1 = new JLabel("Process1");
onglet1.add(titreOnglet1);
onglet1.setPreferredSize(new Dimension(900, 900));
onglets.addTab("Running Process", onglet1);
onglet1.add(new JScrollPane(tab1));
 
/********************Gérer les doubles clics au niveau de la table1**************************/
 
tab1.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
//code à exécuter
 
 
JFrame fen = new JFrame("Fenêtre");
fen.setSize(600,300);
fen.setLocationRelativeTo(null);
fen.setVisible(true);
 
}
}
 
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
});
 
/*********************************************************************/
 
//conteneur du second onglet
JPanel onglet2 = new JPanel();
JLabel titreOnglet2 = new JLabel("Process2");
onglet2.add(titreOnglet2);
onglets.addTab("Database Operation", onglet2);
onglet2.setPreferredSize(new Dimension(900, 900));
onglet2.add(new JScrollPane(tab2));
 
 
//conteneur du troisième ongle-t
JPanel onglet3 = new JPanel();
JLabel titreOnglet3 = new JLabel("Process3");
onglet3.add(titreOnglet3);
onglets.addTab("Process Properties", onglet3);
onglet3.setPreferredSize(new Dimension(900, 900));
onglet3.add(new JScrollPane(tab3));
 
onglets.setOpaque(true);
pannel.add(onglets);
f.getContentPane().add(pannel);
 
 
pannel.revalidate();
pannel.repaint();
 
 
//taille de la fenêtre
f.setSize(1200, 1200);
 
f.repaint();
 
//Rendre la fenêtre visible
f.setVisible(true);
 
// Fermeture de la connexion 
 
conn.close(); 
 
 
 
}
catch (SQLException ex) {
}
}
 
};
 
minuteur.schedule(tache, 0, 12000);
}
}