我正在研究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);
}
}
应用图片:
答案 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注入),并键入安全性/反斜杠转义,以字符串形式引用。如您所见,它更具可读性。
另一种情况是第二个应用程序访问数据库:它可以使用自己的缓存,因此有点过时。