G
Guest
Gast
Hallo,
ich stehe vor folgendem Problem: Ich habe eine JTable und ein dazughöriges TableModel. Die Tabelle wird mir wunderbar angezeigt. Die Daten hole ich via JDBC aus einer Datenbank.
Füge ich nun ebenfalls via JDBC einen Datensatz in die DB ein, möchte ich auch die JTable aktualisieren. Nur klappt das nicht bzw. ich weiß noch nicht, wie ich das anstellen soll. Den relevanten Code poste ich mal hier... Es wäre schön, wenn mir jemand helfen könnte.
Zudem würde ich gerne wissen, wo der Unterschied zwischen
Kann ich auch mittels der setValueAt-Methode des Models Daten via JDBC in die DB schreiben? Wäre das evtl. sogar die ideale Lösung? Wie würde das funktionieren?
Vielen Dank schonmal, Carsten
Methoden in der Klasse Mitarbeitererfassung
Das dazughörige Model
ich stehe vor folgendem Problem: Ich habe eine JTable und ein dazughöriges TableModel. Die Tabelle wird mir wunderbar angezeigt. Die Daten hole ich via JDBC aus einer Datenbank.
Füge ich nun ebenfalls via JDBC einen Datensatz in die DB ein, möchte ich auch die JTable aktualisieren. Nur klappt das nicht bzw. ich weiß noch nicht, wie ich das anstellen soll. Den relevanten Code poste ich mal hier... Es wäre schön, wenn mir jemand helfen könnte.
Zudem würde ich gerne wissen, wo der Unterschied zwischen
undimplements TableModel
liegt. Am besten mal mit eigenen Worten erklärt und nicht allzu abstrakt. Wo genau muss ich dabei das DefaultTableModel einordnen?extends AbstractTableModel
Kann ich auch mittels der setValueAt-Methode des Models Daten via JDBC in die DB schreiben? Wäre das evtl. sogar die ideale Lösung? Wie würde das funktionieren?
Vielen Dank schonmal, Carsten
Methoden in der Klasse Mitarbeitererfassung
Code:
private void setMitarbeiter() {
try {
con = DBConn.openDB();
System.out.println("Connection Successful ");
} catch (Exception e) {
e.printStackTrace();
System.out.println("Keine Verbindung zur Datenbank");
}
try {
java.sql.Date gebdatesql = null;
try {
java.util.Date gebdate = new java.util.Date();
DateFormat df;
df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.GERMANY);
gebdate = df.parse(geburtsdatum.getText());
gebdatesql = new java.sql.Date(gebdate.getTime());
} catch (ParseException pe) {
pe.printStackTrace();
}
PreparedStatement speicherMitarbeiter = con.prepareStatement(
"INSERT into PERSONAL (Nachname,Vorname,Position,Geburtsdatum,Einstellungsdatum,Straße,PLZ,Ort,[Telefon privat]) values (?,?,?,?,?,?,?,?,?)");
System.out.println(nachname.getText());
speicherMitarbeiter.setString( 1, nachname.getText() );
speicherMitarbeiter.setString( 2, vorname.getText() );
speicherMitarbeiter.setString( 3, position.getText() );
speicherMitarbeiter.setDate( 4, gebdatesql );
speicherMitarbeiter.setDate( 5, gebdatesql );
speicherMitarbeiter.setString( 6, strasse.getText() );
speicherMitarbeiter.setString( 7, plz.getText() );
speicherMitarbeiter.setString( 8, ort.getText() );
speicherMitarbeiter.setString( 9, telpriv.getText() );
speicherMitarbeiter.executeUpdate();
System.out.println(speicherMitarbeiter.toString());
speicherMitarbeiter.close();
con.close();
System.out.println("Datenbankverbindung getrennt");
speicherMitarbeiter.close();
con.close();
}catch (Exception e) {
e.printStackTrace();
}
}
Code:
private JScrollPane tabelleAnzeigen() {
//Vector<String> columnNames = new Vector<String>(); // so wars vorher, nacher Object!!!
Vector<Object> columnNames = new Vector<Object>();
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
try {
con = DBConn.openDB();
System.out.println("Connection Successful ");
} catch (Exception e) {
e.printStackTrace();
System.out.println("Keine Verbindung zur Datenbank");
}
try {
String query = "SELECT * from Personal";
Statement stmt = con.createStatement();
ResultSet rst = stmt.executeQuery(query);
ResultSetMetaData md = rst.getMetaData();
int columns = md.getColumnCount();
for (int i = 1; i <= columns; i++) {
String colname=md.getColumnName(i);
columnNames.addElement( colname );
}
while (rst.next()) {
Vector<Object> row = new Vector<Object>(columns);
for (int i = 1; i <= columns; i++) {
row.addElement( rst.getObject(i) );
}
data.addElement( row );
}
rst.close();
stmt.close();
}catch (Exception e2) {
e2.printStackTrace();
}
table = new JTable();
model = new maModel (data, columnNames);
table.setModel(model);
scrollTabelle = new javax.swing.JScrollPane();
scrollTabelle.setViewportView(table);
return scrollTabelle;
}
Das dazughörige Model
Code:
package components;
import java.util.Vector;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
public class maModel implements TableModel {
private static final long serialVersionUID = 8823887607183509554L;
private Vector<TableModelListener> listeners = new Vector<TableModelListener>();
private Vector<Vector<Object>> dataEntries = new Vector<Vector<Object>>();
private Vector<Object> columnidentifier = new Vector<Object>();
public maModel (Vector<Vector<Object>> dataEntries, Vector<Object> columnidentifier) {
this.dataEntries = dataEntries;
this.columnidentifier = columnidentifier;
}
public void addTableModelListener(TableModelListener l) {
listeners.add(l);
}
public void removeTableModelListener(TableModelListener l) {
listeners.remove(l);
}
public Class<?> getColumnClass(int columnIndex) {
return String.class;
}
public int getColumnCount() {
return columnidentifier.size();
}
public String getColumnName(int columnIndex) {
return columnidentifier.get(columnIndex).toString();
}
public int getRowCount() {
return dataEntries.size();
}
public Object getValueAt(int rowIndex, int columnIndex) {
Vector<Object> temp = dataEntries.get(rowIndex);
return temp.get(columnIndex);
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
public void setValueAt(Object value, int rowIndex, int columnIndex) {
Vector<Object> temp = dataEntries.get(rowIndex);
temp.set(columnIndex, value);
}
public void addRow(Vector<Object> row) {
dataEntries.add(row);
}
public void setColumnidentifier(Vector<Object> columnidentifier) {
this.columnidentifier = columnidentifier;
}
public void addTimeColumn(Vector<Object> column) {
for (int i = 0; i < column.size(); ++i) {
Vector<Object> temp = new Vector<Object>();
temp.add(column.get(i));
addRow(temp);
}
}
public void addColumn(String identifier, Vector<Object> column) {
columnidentifier.add(identifier);
int index = dataEntries.get(0).size();
for (int i = 0; i < dataEntries.size(); ++i) {
dataEntries.get(i).add(index, column.get(i));
}
fireTableStructureChanged();
}
public void fireTableStructureChanged() {
fireTableChanged(new TableModelEvent(this, TableModelEvent.HEADER_ROW));
}
public void fireTableChanged(TableModelEvent e){
for (int i = 0, n = listeners.size(); i < n; i++) {
((TableModelListener) listeners.get(i)).tableChanged(e);
}
}
}