perde de données en passant par un TableModel
Bonjour à tous
Je travail actuellement sur les JTables pour afficher les données d'une base de données. Lorsque que j'effectue les traitement pour créer les 2 vecteurs (data et columnName) et que je les affiche avec ceci :
Code:
JTable jtable = new JTable(data,ColumnName);
Je n'ai pas de perte de données
avec le code suivant :
Code:
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
|
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
/*Cette classe se connect à la base de donnee
* creer les 2 vecteurs nécessaire à la creation de la TableModel
* affecte les valeurs creer aux attributs de la classe
* et se deconnect de la base de donnee
*
* Elle instancie egalement les methodes de la classe abstraite
* "AbstractTableModel" qui définit un TableModel
*
* */
public class BddAllelicResultByGermplasm extends AbstractTableModel {
private Vector data = new Vector();
private Vector columnName = new Vector();
ResultSet rsAllResSample = null;
Statement stmt = null;
Connection conn = null;
private static final long serialVersionUID = 1L;
BddAllelicResultByGermplasm() {
recupDonnees();
}
/*
* Cette méthode se connect à la base de donnée et fait des traitement afin
* de générer Les 2 vecteurs pour la construction du modeleTable
*/
public void recupDonnees() {
try {
/* Register the driver */
Class.forName("com.mysql.jdbc.Driver").newInstance();
try {
/* Connexion à la base */
Connection conn = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1/sagacity", "root", "mysql");
try {
stmt = conn.createStatement();
rsAllResSample = stmt
.executeQuery("SELECT * FROM all_res_samp");
ResultSetMetaData md = rsAllResSample.getMetaData();
// info sur la structure de la table table
int columnCount = md.getColumnCount();
/* Creation du vecteur column */
Vector<String> columnName = new Vector<String>(columnCount);
for (int i = 1; i <= columnCount; i++) {
columnName.add(md.getColumnName(i));
}
this.columnName = columnName;
data = new Vector<Vector<String>>(columnCount);
/*
* on creer les lignes une par une et on ajoute au vecteur
* data
*/
while (rsAllResSample.next()) {
Vector<String> row = new Vector<String>(columnCount);
for (int i = 1; i <= columnCount; i++) {
row.add(rsAllResSample.getString(i));
}
data.add(row);
}
this.data = data;
/* Test */
View v = new View();
JTable jt = new JTable(data,columnName);
v.viewTablePrincipale(jt);
conn.close();
} catch (SQLException SQLEx) {
System.out.println("SQLException: " + SQLEx.getMessage());
} finally {
/* En cas de problème on ferme tout */
if (rsAllResSample != null) {
try {
rsAllResSample.close();
} catch (SQLException sqlEx) {
System.out.println("SQLException: "
+ sqlEx.getMessage());
}
rsAllResSample = null;
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException sqlEx) {
System.out.println("SQLException: "
+ sqlEx.getMessage());
}
stmt = null;
}
if (conn != null) {
try {
conn.close();
} catch (SQLException sqlEx) {
// Ignore
}
conn = null;
}
}
} catch (SQLException SQLex) {
System.out.println("SQLException: " + SQLex.getMessage());
System.out.println("SQLState: " + SQLex.getSQLState());
System.out.println("VendorError: " + SQLex.getErrorCode());
}
} catch (Exception ex) {
System.out.println("Exception " + ex.getMessage());
}
}
@Override
public int getColumnCount() {
return columnName.size();
}
@Override
public int getRowCount() {
return data.size() / getColumnCount();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return (String) ((Vector) data.elementAt(rowIndex))
.elementAt(columnIndex);
}
} |
Des lignes manques lorsque que je me sert du TableModel comme ceci
Code:
1 2 3 4
|
BddAllelicResultByGermplasm bddAll = new BddAllelicResultByGermplasm ();
JTable jtable = new JTable(bddAll); |
Est ce que vous avez déjà rencontré ce genre de problème ?
Merci