我在更新数据库中的数据时发现一个问题。日志显示更新成功,但数据库中的数据没有变化。这种情况有时会发生,但并不频繁,比如 200 例中就有 1 例。
下面是代码:
public void updateRecharge(String serial_num, String msg, String succ_amout, String datetime) {
try {
con = open();
} catch(Exception e) {
e.printStackTrace();
log.writeLog(serial_num, datetime, "fail to update: " + e.getMessage());
return;
}
String area = new JudgeTidField().checkTidField(serial_num)[1];
String table = new JudgeTidField().table(area);
String query = "update " + table + " set Recharge_state=?, Recharge_money=?, Recharge_record_date=? where Serial_number='" + serial_num + "';";
try {
preState = con.prepareStatement(query);
preState.setString(1, msg);
preState.setFloat(2, Float.valueOf(succ_amout));
preState.setString(3, datetime);
preState.executeUpdate();
log.writeLog(serial_num, datetime, "success to update");
} catch(Exception e) {
e.getMessage();
log.writeLog(serial_num, datetime, "fail to update: " + e.getMessage());
} finally {
try {
preState.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
我查看日志,显示“更新成功”,但数据没有改变。什么样的问题导致这种情况发生?
最佳答案
根据@MadProgrammer的建议,您应该对serialNum使用参数替换,并检查executeUpdate的返回值。
此外,我会使用 java.text.DateFormat将 datetime
转换为 java.util.Date 并调用 java.sql.PreparedStatement.setDate(...)将其应用到 preState
。这将尽早捕获任何日期格式问题。
此外,如果任何参数为空,那么您必须显式调用 java.sql.PreparedStatement.setNull(...)
关于java - 为什么更新查询不更新Mysql数据库中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30746424/