使用Spring JDBC模板从mysql数据库中检索Timestamp值

时间:2014-12-06 10:52:24

标签: java mysql spring spring-jdbc jdbctemplate

我正在基于Spring的Java项目中实现密码恢复功能。这是我的方法

  1. 用户点击忘记密码链接
  2. 在下一个屏幕中,用户输入用于注册其帐户的电子邮件地址
  3. 系统生成UUID令牌,并将其与用户输入的电子邮件地址一起保存在数据库表中。此外,到期时间将作为Timestamp
  4. 保存在数据库中
  5. 向用户发送包含重置密码链接的电子邮件。 (UUID令牌包含在电子邮件中)
  6. 当用户点击电子邮件中的链接时,他/她将被重定向到密码重置页面。
  7. 在该页面中,系统会使用UUID令牌自动将用户的电子邮件地址设置为文本字段。 在这里,我需要检查到期时间是否到期。为此,我需要将当前时间的Timestamp value与使用Timestamp value
  8. 从数据库中获取的到期时间的UUID token.进行比较

    我使用此代码段来检索到期时间的timestamp值。

        @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时,Eclipse建议queryForObject() 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。

    我是否使用错误的方法检查密码重置链接的有效性?如果是这样,实施它的好方法是什么?

1 个答案:

答案 0 :(得分:1)

queryForObject(String, Class)方法将Class实例作为其第二个参数。因此,正确的语法是:

getJdbcTemplate().queryForObject(sql, java.sql.Timestamp.class);

您使用的代码不是有效的Java代码,这就是它无法编译的原因。