Hallo,
nachdem ich mein JAVA LBD 2010 aus Zeitgründen abbrechen musste (PHP war zu diesem Zeitpunkt leider wichtiger), habe ich nun dieses Jahr wieder angefangen. Bin also nach wie vor Newbie.
Ich habe zum testen eine MySQL-Tabelle mit verschiedenen Datentypen angelegt und versuche diese auszulesen. Das klappt auch und in der Konsole kann ich mir die Daten auch wunderbar formatiert ausgeben lassen. Nun scheitert das ganze, dass ich diese Daten in einer Tabelle genauso angezeigt haben möchte. Ich lese mir seit Wochen die Augen wund über jtable, cellrenderer und tablemodel.
Ich habe natürlich einiges gefunden und ausprobiert, aber ehrlich, ich checks nich.
Nachfolgend mal ein Code den ich, wie soll es anders sein, im Netz gefunden habe.
Ich schau sprichwörtlich wie die Sau ins Uhrwerk. Wenn ich das ausgeben lasse werden die Spaltennamen von hinten beginnend angezeigt und wie zur Hölle komme ich denn nun an meine Daten?
Ich weis das es bestimmt nervt aber gibt es jemanden der Geduld mit mir hat und das mal durchkaut?
Die Tabelle i_kbuch enthält Spalten mit Integeren Werten, Beträgen und Datum.
Maik
nachdem ich mein JAVA LBD 2010 aus Zeitgründen abbrechen musste (PHP war zu diesem Zeitpunkt leider wichtiger), habe ich nun dieses Jahr wieder angefangen. Bin also nach wie vor Newbie.
Ich habe zum testen eine MySQL-Tabelle mit verschiedenen Datentypen angelegt und versuche diese auszulesen. Das klappt auch und in der Konsole kann ich mir die Daten auch wunderbar formatiert ausgeben lassen. Nun scheitert das ganze, dass ich diese Daten in einer Tabelle genauso angezeigt haben möchte. Ich lese mir seit Wochen die Augen wund über jtable, cellrenderer und tablemodel.
Ich habe natürlich einiges gefunden und ausprobiert, aber ehrlich, ich checks nich.
Nachfolgend mal ein Code den ich, wie soll es anders sein, im Netz gefunden habe.
Java:
package mysql.jtable;
import java.sql.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
public class Main extends JFrame {
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String CONNECTION = "jdbc:mysql://localhost:3306/db67769";
private static final String USER = "root";
private static final String PASS = "";
private static final String QUERY = "SELECT * FROM i_kbuch";
final ResultSetToTableModel model = new ResultSetToTableModel();
Main() throws Exception {
// Add table to model
add(new JScrollPane(new JTable(model)));
// Connect to database, query result, set to database
try
{
Class.forName(DRIVER);
Connection c = DriverManager.getConnection(CONNECTION,USER,PASS);
ResultSet rs = c.createStatement().executeQuery(QUERY);
model.setResultSet(rs);
}catch (Exception e){
e.printStackTrace();
}
// Minimalistic frame initialization
pack();
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
new Main().setVisible(true);
} catch (Exception ex) {
System.err.println(ex.getMessage());
ex.printStackTrace();
}
}
});
}
}
/** Simple resultset table model */
class ResultSetToTableModel extends AbstractTableModel {
// Currently displayed result set
private ResultSet rs;
// Associated metadata
private ResultSetMetaData rsMeta;
// Column count
private int columnCount;
// Column names
private final Vector<String> columnNames = new Vector<String>();
// Vector of rows
private final Vector<Object[]> cache = new Vector<Object[]>();
/** Set new result set */
public void setResultSet(ResultSet rs) throws SQLException {
if (this.rs != null)
this.rs.close();
cache.clear();
// 'Cache' some metadata data
rsMeta = rs.getMetaData();
columnCount = rsMeta.getColumnCount();
columnNames.clear();
for(int col = columnCount; col > 0; col--) {
columnNames.add(rsMeta.getColumnName(col));
}
// 'Cache' new resultest data
while(rs.next()) {
Object rowData[] = new Object[columnCount];
for(int col = columnCount; col > 0; col--)
rowData[col - 1] = rs.getObject(col);
cache.add(rowData);
}
// Reload table structure
fireTableStructureChanged();
}
/** Close result set */
public void close() throws SQLException {
rs.close();
}
/** ## TableModel interface ## */
public String getColumnName(int column) {
return columnNames.get(column);
}
/** ## TableModel interface ## */
public Object getValueAt(int rowIndex, int columnIndex) {
Object[] row = cache.get(rowIndex);
return row[columnIndex];
}
/** ## TableModel interface ## */
public int getRowCount() {
return cache.size();
}
/** ## TableModel interface ## */
public int getColumnCount() {
return columnCount;
}
}
Ich weis das es bestimmt nervt aber gibt es jemanden der Geduld mit mir hat und das mal durchkaut?
Die Tabelle i_kbuch enthält Spalten mit Integeren Werten, Beträgen und Datum.
Maik