如何在MySql时间戳中存储java日历时间?

时间:2015-10-09 14:44:25

标签: java mysql datetime

我正在实施Java"忘记密码功能"并需要在重置密码页面添加一个到期时间。我为时间创建了一个Calendar类对象,并添加了30分钟。代码如下:

java.util.Date utilDate = new java.util.Date();
Calendar cal = Calendar.getInstance();
cal.setTime(utilDate);
cal.add(Calendar.MINUTE, 30);

在数据库查询中用作:

String query = "INSERT INTO forgotpasskeytab (keyId, emailid, expireIn) VALUES ('"+uniqueID+"','"+emailid+"','"+cal.getTime()+"')";

我的forgotpasskeytab表格中的 expireIn 列的类型为timestamp

运行时出现以下错误:

  

com.mysql.jdbc.MysqlDataTruncation:数据截断:日期时间值不正确:' Fri Oct 09 20:39:14 IST 2015'对于列' expireIn'在第1行

还有其他更好的方法可以在mysql DB表中保存过期时间吗?

2 个答案:

答案 0 :(得分:2)

从不使用字符串连接在SQL中插入文本值,除非您希望让自己对SQL Injection攻击持开放态度,允许黑客删除或窃取您的所有数据。请改用PrepareStatement

这也有助于日期/时间值:

String sql = "INSERT INTO forgotpasskeytab (keyId, emailid, expireIn) VALUES (?,?,?)";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
    stmt.setString(1, uniqueID); // or setInt?
    stmt.setString(2, emailid); // or setInt?
    stmt.setTimestamp(3, new java.sql.Timestamp(cal.getTimeInMillis()));
    stmt.executeUpdate();
}

答案 1 :(得分:0)

为了使您的查询正常工作,您需要一个java.sql.Timestamp的时间戳实例和您的' cal.getTime()'返回错误的java.util.Date实例。

因此,以下查询应该适合您的情况:

String query = "INSERT INTO forgotpasskeytab (keyId, emailid, expireIn) VALUES ('"+uniqueID+"','"+emailid+"','"+ new java.sql.Timestamp(cal.getTime()) +"')";