[英]How to update(refresh) JTable with data from a database
我在添加或刪除數據庫(MS Access)中的記錄后嘗試更新JTable
,但它似乎不起作用。 另外,我不明白為什么我的列名不顯示。 這是我的代碼:
package Administrator13_03_13;
public class Arsti2 {
JFrame main = new JFrame("Ārst");
JPanel tP = new JPanel();
JPanel bP = new JPanel();
JButton one = new JButton("Test");
JTable table = new JTable();
DefaultTableModel model;
Vector columnNames = new Vector();
Vector data = new Vector();
Arsti2() {
main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
main.setSize(840,300);
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String Base = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}; DBQ=SL.mdb";
Connection con = DriverManager.getConnection(Base,"","");
Statement st = con.createStatement();
ResultSet res = st.executeQuery("SELECT * FROM Arsti");
ResultSetMetaData rsmd = res.getMetaData();
int column = rsmd.getColumnCount();
columnNames.addElement("ID");
columnNames.addElement("Vards");
columnNames.addElement("Uzvards");
columnNames.addElement("Dzimums");
columnNames.addElement("Personas kods");
columnNames.addElement("Telefona numurs");
columnNames.addElement("Nodalas ID");
columnNames.addElement("Amata ID");
while(res.next()) {
Vector row = new Vector(column);
for(int i=1; i<=column; i++) {
row.addElement(res.getObject(i));
}
data.addElement(row);
}
model = new DefaultTableModel(data,columnNames);
table.setModel(model);
//model.fireTableDataChanged();
tP.add(table);
bP.add(one);
main.add(tP,BorderLayout.NORTH);
main.add(bP,BorderLayout.SOUTH);
} catch(Exception e) {
e.printStackTrace();
}
main.setVisible(true);
one.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evnt1) {
model.fireTableDataChanged();
}
});
}
public static void main(String[] args) {
new Arsti2();
}
}
我也不明白為什么我的專欄名稱不顯示
除非您向其添加容器(如JScrollPane),否則不會顯示列名稱。
add(new JScrollPane(table));
應該夠了。
只是model.fireTableDataChanged();
不工作你必須從數據庫重新加載你的模型這應該工作:
public class Arsti2 {
JFrame main = new JFrame("Ārst");
JPanel tP = new JPanel();
JPanel bP = new JPanel();
JButton one = new JButton("Test");
JTable table = new JTable();
DefaultTableModel model;
Vector columnNames = new Vector();
Vector data = new Vector();
Arsti2() {
main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
main.setSize(840,300);
try {
reloadData();
model = new DefaultTableModel(data,columnNames);
table.setModel(model);
//model.fireTableDataChanged();
tP.add(table);
bP.add(one);
main.add(tP,BorderLayout.NORTH);
main.add(bP,BorderLayout.SOUTH);
} catch(Exception e) {
e.printStackTrace();
}
main.setVisible(true);
one.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evnt1) {
try {
reloadData();
model.fireTableDataChanged();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
private void reloadData() throws ClassNotFoundException, SQLException {
columnNames.clear();
data.clear();
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String Base = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}; DBQ=SL.mdb";
Connection con = DriverManager.getConnection(Base,"","");
Statement st = con.createStatement();
ResultSet res = st.executeQuery("SELECT * FROM Arsti");
ResultSetMetaData rsmd = res.getMetaData();
int column = rsmd.getColumnCount();
columnNames.addElement("ID");
columnNames.addElement("Vards");
columnNames.addElement("Uzvards");
columnNames.addElement("Dzimums");
columnNames.addElement("Personas kods");
columnNames.addElement("Telefona numurs");
columnNames.addElement("Nodalas ID");
columnNames.addElement("Amata ID");
while(res.next()) {
Vector row = new Vector(column);
for(int i=1; i<=column; i++) {
row.addElement(res.getObject(i));
}
data.addElement(row);
}
}
public static void main(String[] args) {
new Arsti2();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.