我正在开发 Java GUI 应用程序,该应用程序连接到本地主机上的 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);
}
}
申请图片:
最佳答案
您不会关闭,这可以通过 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注入(inject))和类型安全/反斜杠转义,字符串中的引号。正如您所看到的,它更具可读性。
另一种情况是第二个应用程序访问数据库:它可以使用自己的缓存,因此有点过时。
关于JAVA & SQL 数据库保存更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54865849/