使用Spring JDBC模板从mysql数据库检索Timestamp值
问题描述:
我在基于Spring的Java项目中实现密码恢复功能。这是我的方法对于使用Spring JDBC模板从mysql数据库检索Timestamp值
- 用户点击忘记密码的链接
- 在下一屏,用户输入已经习惯了他/她的账户注册
- 系统他的电子邮件地址生成
UUID
令牌,并将其与用户输入的电子邮件地址一起保存在数据库表中。此外,到期时间将作为Timestamp
的值保存在数据库中 - 包含重置密码链接的电子邮件将发送给用户。 (UUID令牌包含在电子邮件中)
- 当用户单击电子邮件中的链接时,他/她将被重定向到密码重置页面。
- 在该页面中,系统使用
UUID
令牌自动将用户的电子邮件地址设置为文本字段。 在这里,我需要检查到期时间是否到期。为此,我需要使用UUID token.
我用这个代码段来获取到期时间timestamp
值与它从数据库中获取到期时间Timestamp value
的当前时间Timestamp value
比较。
@Override
public String checkValidityOfToken(UUID token) {
System.out.println("INFO:token in Login Dao Impl = "+token);
java.sql.Timestamp ex_time;
try{
String sql = "SELECT expiray_time FROM recover_password WHERE token = "+token;
ex_time = getJdbcTemplate().queryForObject(sql, java.sql.Timestamp);
System.out.println("INFO: first total = "+ex_time);
}catch(Exception exx){
System.out.println("error while taking saved time count for a matching token "+exx);
}
}
虽然java.sql.Timestamp
在queryForObject()
由Eclipse的建议时,我打ctrl+space
,Eclipse中显示有错误。这是为什么。 此任务的正确代码段是什么。
然后我用这个,
String sql = "SELECT expiray_time FROM recover_password WHERE token = ?";
ex_time = getJdbcTemplate().queryForObject(sql, new Object[] { token }, java.sql.Timestamp);
在这种情况下,同样java.sql.Timestamp
无法识别。包含上述方法的类扩展了SimpleJdbcDaoSupport。
OR
难道我用检查密码重置链接的有效性的错误的方式?如果是的话什么是实施它的好方法?
答
queryForObject(String, Class)
方法将Class
实例作为其第二个参数。因此,正确的语法是这样的:
getJdbcTemplate().queryForObject(sql, java.sql.Timestamp.class);
您使用的代码不是有效的Java代码,这是它无法编译的原因。
谢谢各有不同 – vigamage 2014-12-06 17:06:58