簡體   English   中英

如何使用數據庫中的數據更新(刷新)JTable

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM