PreparedStatement.setTimestamp未将时间戳插入DB

时间:2015-10-21 07:44:56

标签: java mysql timestamp prepared-statement

我正在研究帐户管理系统。目标是将试用期设置为db。我从Timestamp "2015-10-30 22:55:48"获取jsonObject到REST服务并使用预准备语句插入到db中。但是每次我得到effected rows 0并且意味着没有执行更新操作!

我尝试过以下代码,包括解析和转换:

JSONParser parser = new JSONParser();
Object obj = parser.parse(requestBody); 
JSONObject jsonObject = (JSONObject) obj;

String accountExpiryStr = jsonObject.get("accountExpiry").toString();

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date parsedDate = dateFormat.parse(accountExpiryStr);
Timestamp accountExpiry = new Timestamp(parsedDate.getTime()); // accountExpiry output is 2015-10-30 22:55:48.0

String requestQuery = "UPDATE table SET Account_Expiry = ?"
                + "WHERE Account_Id = ? "
                + "AND User_Id = ? ";
preparedStatement = con.prepareStatement(requestQuery);
preparedStatement.setTimestamp(1, accountExpiry);
preparedStatement.setInt(2, Integer.parseInt((String) jsonObject.get("selectedUserId")));
preparedStatement.setInt(3, Integer.parseInt((String) jsonObject.get("accountId")));

rowCount = preparedStatement.executeUpdate();

System.out.println("Effected Rows: " + rowCount);

1 个答案:

答案 0 :(得分:0)

Affected rows = 0表示UPDATE的where子句与表中的任何记录都不匹配。所以你应该首先检查where子句是否正确。

似乎您已切换用户ID和帐户ID ...
而是写:

preparedStatement.setInt(2, Integer.parseInt((String) jsonObject.get("accountId")));
preparedStatement.setInt(3, Integer.parseInt((String) jsonObject.get("selectedUserId")));