我在更新数据库中的数据时发现了一个问题。日志显示更新成功,但数据库中的数据不会更改。这种情况有时会发生,而不是像200中的一样。
下面是代码:
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();
}
}
}
我检查日志,显示“更新成功”,但数据没有变化。什么样的问题会导致这种情况发生?
答案 0 :(得分:2)
根据@MadProgrammer的建议,您应该使用参数替换serialNum并检查executeUpdate的返回值。
此外,我会使用java.text.DateFormat将datetime
转换为java.util.Date,并调用java.sql.PreparedStatement.setDate(...)将其应用于preState
。这将尽早捕获任何日期格式问题。
此外,如果任何参数为null,则必须明确调用java.sql.PreparedStatement.setNull(...)