JAVA:在对数据库进行更改后如何更新/刷新表

JAVA:在对数据库进行更改后如何更新/刷新表,java,jdbc,jtable,h2,Java,Jdbc,Jtable,H2,我不熟悉java和DBMS。当用户单击同一按钮显示JTable时,在对H2数据库进行任何更改之后,以及在将数据写入数据库之后(当单击write按钮时),我尝试更新/刷新JTable。我尝试了一些方法,读了一些帖子,但找不到任何对我的程序至关重要的东西。下面的代码说明了我的问题 这是用于从数据库读取数据并在JTable上显示的方法 public void readActiveData() throws IOException, InstantiationException, IllegalAcce

我不熟悉java和DBMS。当用户单击同一按钮显示JTable时,在对H2数据库进行任何更改之后,以及在将数据写入数据库之后(当单击write按钮时),我尝试更新/刷新JTable。我尝试了一些方法,读了一些帖子,但找不到任何对我的程序至关重要的东西。下面的代码说明了我的问题

这是用于从数据库读取数据并在JTable上显示的方法

public void readActiveData() throws IOException, InstantiationException, IllegalAccessException, SQLException {       

    try {
        st = conn.createStatement();
    } catch (SQLException sqlex) {
        JOptionPane.showMessageDialog(null, "Can't connect to DB. " + sqlex);
        dispose();
    }

    try {
        rs = st.executeQuery("SELECT * FROM main_data WHERE expirationDate > NOW() + 1;");
        rs.beforeFirst();

        while (rs.next()) {
            int id = rs.getInt(1);
            String ovogNer = rs.getString(2);
            String regNum = rs.getString(3);
            String itemName = rs.getString(4);
            String note = rs.getString(5);
            int zHemjee = rs.getInt(6);
            int hvv = rs.getInt(7);
            int hugatsaa = rs.getInt(8);
            today = rs.getDate(9);
            int totalPay = rs.getInt(10);
            expirationDate = rs.getDate(11);
            rows++;
        }
        regData = new Object[rows][11];

        Object[] Colheads = {"Бүртгэлийн дугаар", "Овог нэр", "Регистрийн дугаар", "Барьцаа",
             "Тэмдэглэл", "Зээлийн хэмжээ", "Хүү (%)", "Хугацаа", "Огноо", "Нийт төлөх", "Дуусах хугацаа"};

        rs = st.executeQuery("SELECT * FROM main_data WHERE expirationDate >   NOW() + 1;");

        for (int i1 = 0; i1 < rows; i1++) {
            rs.next();

            for (int j1 = 0; j1 < 11; j1++) {
                regData[i1][j1] = rs.getString(j1 + 1);
            }
        }
        model = new DefaultTableModel(regData, Colheads);
        table = new JTable(model);
        int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
        int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
        JScrollPane jsp = new JScrollPane(table, v, h);
        activeDataPanel.add(jsp);
        rs.close();
        st.close();
        conn.close();
    }

这个问题已经回答了

但最终还是要清除并重新命名JTable对象。i、 更新,上面的帖子很好地解释了这一点


希望你做得对。

你有什么问题,有没有出错?
public void writeDataIntoDB() throws InstantiationException, IllegalAccessException {

    ResultSet rs = null;
    Connection conn = null;
    Statement st = null;
    PreparedStatement pst = null;

    final String URL = "jdbc:h2:~/registDB";
    final String USER = "admin";
    final String PASS = "password";
    LocalDate currentDate = LocalDate.now();
    String input = hugatsaaFld.getText();
    long addDays = Long.parseLong(input);
    expiration = currentDate.plusDays(addDays);
    expirationDate = java.sql.Date.valueOf(expiration);

    try {

        Class.forName("org.h2.Driver").newInstance();

        conn = DriverManager.getConnection(URL, USER, PASS);

        String sql = "INSERT INTO main_data(ovogNer,regNum,itemName,note,zHemjee,hvv,hugatsaa,date,totalPay,expirationDate)"
                + "VALUES"
                + "(?,?,?,?,?,?,?,?,?,? )";
        pst = conn.prepareStatement(sql);
        pst.setString(1, getOvogNer());
        pst.setString(2, getRegNum());
        pst.setString(3, getItemName());
        pst.setString(4, getNote());
        pst.setInt(5, +getzHemjee());
        pst.setInt(6, +getHvv());
        pst.setLong(7, +getHugatsaa());
        pst.setDate(8, java.sql.Date.valueOf(LocalDate.now()));
        pst.setDouble(9, getTotalPay());
        pst.setDate(10, expirationDate);
        pst.executeUpdate();
        pst.close();
        conn.close();
    } catch (SQLException se) {
        JOptionPane.showMessageDialog(null, "Error: " + se);
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();
    }
}