JAVA和SQL数据库保存更改

时间:2019-02-25 12:06:01

标签: java sql jdbc

我正在研究Java GUI应用程序,该应用程序连接到localhost上的SQL数据库(我使用XAMPP)。当我更改某些条目(例如,年龄)时,我单击“保存更改”,它被保存并在SQL数据库中完成更改,但是当我单击“>”或“ <”以查看下一个或上一个人然后转到回到我所做更改的那个人,每个条目的初始状态都没有改变。但是,当我关闭应用程序并重新打开它时,所做的所有更改都已完成。我认为这是代码错误的一部分。谢谢。

private void jButtonSaveChangesActionPerformed(java.awt.event.ActionEvent evt) {                                                 
            try {                                                 
                Statement stmt = con.createStatement();
                try {
                    String query1 = "UPDATE list1 SET " +
                            "name ='" + jTextFieldName.getText() + "', " +
                            "surname ='" + jTextFieldSurname.getText() + "', " +
                            "age ='" + jTextFieldAge.getText() + "' " +
                            "WHERE ID = " + jLabelActualID.getText();
                    stmt.executeUpdate(query1);
                } catch (Exception e) {
                    System.err.println(e);
                }
            } catch (Exception e) {
              System.err.println(e);
            }
    }

应用图片:

enter image description here

1 个答案:

答案 0 :(得分:1)

您没有关闭,使用try-with-resources可以更安全,更自动地完成操作。

这意味着可能尚未发生提交。也有一个自动提交设置。

        String query1 = "UPDATE list1 SET " +
                        "name = ?, " +
                        "surname = ?, " +
                        "age = ? " +
                        "WHERE ID = ?";
        try (PreparedStatement stmt = con.prepareStatement(query1)) { // Closes stmt.
            stmt.setString(1, jTextFieldName.getText());
            stmt.setString(2, jTextFieldSurname.getText());
            stmt.setInt(3, Integer.parseInt(jTextFieldAge.getText()));
            stmt.setString(4, jLabelActualID.getText());
            int updateCount = stmt.executeUpdate();
         } catch (SQLException | NumberFormatException e) {
             System.err.println(e);
         }

对于SQL连接,它可能保持(或可能不保持)。

也应该使用PreparedStatement来确保安全性(SQL注入),并键入安全性/反斜杠转义,以字符串形式引用。如您所见,它更具可读性。

另一种情况是第二个应用程序访问数据库:它可以使用自己的缓存,因此有点过时。