Тема: Оновити jTable після додавання колонки, рядка в базу даних SQLite ?
Допоможіть з реалізацією моделі таблиці jTable щоб вона оновлювалась відразу після додавання рядків та колонок в БД SQLite . Моя модель таблиці успадковується від AbstractTableModel. Я створював кнопки і для них Listenerи . В базу даних добавляються і колонки , і рядки, але в таблиці jTable зміни зявляються тільки після перезапуску програми.
Весь код давати не буду , бо він величенький:
це модель таблиці :
public class t2estDBTableModel extends AbstractTableModel{
private static Connection conn;// зєднання з базою даних
private Object[][] contents;// зберігає дані
private String[] columnNames; // зберігає імена колонок
private Class[] columnClasses; // зберігає типи колонок
private ResultSet rs =null;
private DatabaseMetaData meta;
JTable jtable;
String tableName ;
int count ;
public t2estDBTableModel(Connection conn,JTable jtable,
String tableName)
throws SQLException {
super();
this.jtable=jtable;
this.tableName=tableName;
t2estDBTableModel.conn = conn;
getTableContents(tableName);
}
public void getTableContents(String tableName) //багато кода, тому я пишу лише назву метода. виводить в // jTable дані з БД.
// this.fireTableStructureChanged();
@Override
public int getRowCount() {
return contents.length;
}
@Override
public int getColumnCount() {
if (contents.length == 0) {
return 0;
} else {
return contents[0].length;
}
}
@Override
public Object getValueAt(int row, int column) {
return contents[row][column];
}
@Override
public Class<?> getColumnClass(int col) {
return columnClasses[col];
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
public boolean isCellEditable(int i, int i1) {
return true;
}
@Override
public void setValueAt(Object o, int row, int column) // Реалізує оновлення даних в ячейках таблиці.
}
Listener для кнопки . Клацнувши по ній добавляється нова строка в БД . ТРЕБА ЩЕ ЩОБ ВІДРАЗУ ОНОВЛЮВАЛИСЬ ДАНІ І В jTable !!! :
public class AddRowButtonListener implements ActionListener {
Connection con;
String tableName;
private JTable jtable;
// TableModel mod ;
PreparedStatement pstmtAddRow = null;
JTable table ;
AddRowButtonListener(Connection con, String tableName,TableModel mod, JTable table) {
this.con = con;
this.tableName = tableName;
this.table = table;
}
@Override
public void actionPerformed(ActionEvent ae) {
try {
String sql = "INSERT INTO '"+tableName+"'(UA,EN,RU) VALUES (? , ?,?)" ;
pstmtAddRow = con.prepareStatement(sql);
pstmtAddRow.setObject(2, (String)"1hhhh");
pstmtAddRow.setObject(3, (String)"2hhhh");
pstmtAddRow.setObject(1, (String)"3hhhh");
pstmtAddRow.executeUpdate();
} catch (SQLException ex) {
Logger.getLogger(AddRowButtonListener.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Я читав що треба використовувати :fireTableStructureChanged(); , fireTableRowsInserted(row, row); та інші...
а ось як , де не знаю . Розраховую на допомогу.