Bonjour,

j'ai écrit le code suivant qui me permet de modifier les données de la JTable a chaque fois que de nouvelles données parviennent au server-sql.
Le soucis que j'ai, c'est que lorsque de nouvelles lignes apparaissent ma JTable ne les prend pas en compte.
J'ai essayé de faire quelques modifs mais ça me donnait à chaque fois des exceptions.
Comment est-ce qu'il faut que je modifie le code pour que des nouvelles lignes puisses être ajoutées à ma JTable lorsque c'est nécessaire.
Merci

Voici le 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
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
 
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
 
import sun.jdbc.odbc.JdbcOdbcDriver;
 
public class MyTableModel4 extends AbstractTableModel{
	static final long serialVersionUID = 1L;
	String[] nomDesColonnes;
 
	Object[][] donnees;
 
	public MyTableModel4(ResultSet rs) throws SQLException{
		ResultSetMetaData rsmd = rs.getMetaData();
		int ncols = rsmd.getColumnCount();
		nomDesColonnes = new String[ncols];
		for(int i=1; i<=ncols; i++){
			nomDesColonnes[i-1] = rsmd.getColumnLabel(i); 
		}
		rs.last();
		int nlignes=rs.getRow();
		//Remise du curseur à sa position initiale
		rs.beforeFirst();
 
		donnees = new String [nlignes][ncols];
 
		boolean suivant = rs.next();
		int k=0;
		while(suivant){
			for(int j=1; j<=ncols; j++){
				donnees[k][j-1] = rs.getString(j);
			}
			suivant = rs.next();
			k++;
		}
	}
 
	/* retourne le nombre d'element de la colonne */
	public int getColumnCount() {
		return nomDesColonnes.length;
	}
 
	/* retourne le nombre d'elements de la ligne */
	public int getRowCount() {
		return donnees.length;
	}
 
	/* retourne le nom de la colonne */
	public String getColumnName(int col) {
		return nomDesColonnes[col];	
	}
 
	/* retourne la valeur à la ligne row et colonne col */
	public Object getValueAt(int row, int col) {
		return donnees[row][col];
	}
 
	/* retourne le type de chaque colonne */
	public Class getColumnClass(int c) {
		return getValueAt(0, c).getClass();
	}
 
	/* definie les cellules éditables ou non */
	public boolean isCellEditable(int row, int col) {
			return false;
	}
 
	/* permet de modifier l'element en placant value a la ligne row colonne col */
	public void setValueAt(Object value, int row, int col) {
		donnees[row][col] = value;
		fireTableCellUpdated(row, col); // on signal un changement
	}	
 
	public static void main(String [] args){
		//Parametre de connexion a la base de données
		String url="jdbc:odbc:MAGIC";
    String login = "root";
    String password = "root";
    Connection connection = null;
		try{
			Driver monDriver = new JdbcOdbcDriver();
			DriverManager.registerDriver(monDriver);	
			connection=DriverManager.getConnection(url,login,password);
 
			Statement stmt = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
 
			String sql = "SELECT [Full Name] AS PERSONNE, "+
	    "[GROUP Name] AS EQUIPE, "+  
       "SUM(CASE "+  
              "WHEN [Seq.Assigned TO] = [Seq.Open BY] THEN 1 "+
              "ELSE 0 "+
           "END) AS OUVERT, " +
		"SUM(CASE "+  
              "WHEN [Seq.Assigned TO] = [Seq.Closed BY] THEN 1 "+
              "ELSE 0 "+
           "END) AS FERME, "+
		"SUM(CASE "+
              "WHEN [Seq.Open BY] = [Seq.Closed BY] THEN 1 "+
              "ELSE 0 "+
           "END) AS [OUVERT & FERME] "+
 
    "FROM   MAGIC._SMDBA_.[Groups Details] G "+
       "INNER JOIN MAGIC._SMDBA_.Incident I "+
             "ON I.[Seq.Assigned TO] = G.[Seq.SupportStaff] "+
 
    "WHERE (I.[Close Date & Time] BETWEEN '20070608 00:00:00.000' AND '20070608 19:00:00.000') "+
     "AND (I.[GROUP Name]='EHSFAC-SERVICEDESK1' OR I.[GROUP Name]='EHSFAC-SERVICEDESK2') "+
 
     "GROUP  BY [Full Name], [GROUP Name]";
 
			ResultSet rs = stmt.executeQuery(sql);
 
			MyTableModel4 myModel = new MyTableModel4(rs);
			JTable table = new JTable(myModel);
			JFrame frame = new JFrame("MyTableModel");
			JScrollPane scroll = new JScrollPane(table);
			frame.setSize(300,200);
			frame.add(scroll);
			frame.setVisible(true);
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
			while(true){
				rs = stmt.executeQuery(sql);
				boolean suivant = rs.next();
				int k=0;
				while(suivant){
					while(k<myModel.getRowCount()){
						for(int i=1; i<=myModel.getColumnCount(); i++){
							myModel.setValueAt(rs.getString(i), k, i-1);
							//myModel.setValueAt("random", k, i-1);
						}
						suivant = rs.next();
						k++;
						try {
							Thread.sleep(2000);
						}catch(InterruptedException ie){}
					}
				}
			}
		}catch(SQLException e){
			e.printStackTrace();
		}		
	}
}