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
|
public class DBViewerTableModel extends AbstractTableModel
{
private String[] columnNames ;
private String [] columnClassNames ;
private Class [] columnClasses ;
private ArrayList<ArrayList> data ;
private int nbCols ;
private int nbRow ;
public DBViewerTableModel(ResultSet rs)
throws SQLException
{
determineColumnTypes(rs) ;
extractData(rs) ;
}
private void determineColumnTypes(ResultSet rs)
throws SQLException
{
ResultSetMetaData metadata = (ResultSetMetaData) rs.getMetaData(); // Get metadata on them
nbCols = metadata.getColumnCount();
columnNames = new String[nbCols];
columnClassNames = new String[nbCols];
columnClasses = new Class[nbCols] ;
// Retrieve and store column informations and classes
for(int i = 0 ; i < nbCols ; i++){
columnNames[i] = metadata.getColumnName(i+1);
columnClassNames[i] = metadata.getColumnClassName(i+1) ;
// Determine class
try {
columnClasses[i] = Class.forName(columnClassNames[i]) ;
}
catch (ClassNotFoundException ex) {
columnClasses[i] = String.class ;
}
}
}
private void extractData(ResultSet rs)
throws SQLException
{
data = new ArrayList<ArrayList>();
// Loop over the result set rows (molecules...)
nbRow = 0 ;
while (rs.next()){
// For each molecule create an array list that will store all
// associated values like ID, descriptors ...
ArrayList row = new ArrayList(nbCols);
for(int i = 0 ; i < nbCols ; i++){
// Otherwise store the exact column type.
if(columnClasses[i].equals(Integer.class)) row.add(i, rs.getInt(i+1)) ;
else if(columnClasses[i].equals(Long.class)) row.add(i, rs.getLong(i+1)) ;
else if(columnClasses[i].equals(Float.class)) row.add(i, rs.getFloat(i+1)) ;
else if(columnClasses[i].equals(Double.class)) row.add(i, rs.getDouble(i+1)) ;
else if(columnClasses[i].equals(Boolean.class)) row.add(i, rs.getBoolean(i+1)) ;
else if(columnClasses[i].equals(Date.class)) row.add(i, rs.getDate(i+1)) ;
else row.add(i, rs.getString(i+1)) ;
}
// Actually add the molecule to the full list.
if (row != null) {
data.add(nbRow, row) ;
nbRow ++ ;
}
}
}
public void setData(ResultSet rs)
throws SQLException
{
// Retrieve and store the new molecules
determineColumnTypes(rs) ;
extractData(rs) ;
fireTableStructureChanged();
fireTableDataChanged();
}
public int getRowCount() {
return this.nbRow ;
}
public int getColumnCount() {
return this.nbCols ;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return ((ArrayList)data.get(rowIndex)).get(columnIndex);
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
public String[] getHeaders() {
return columnNames;
}
@Override
public Class getColumnClass(int column) {
return columnClasses[column] ;
}
} |
Partager