从MySQL数据库使用Spring JDBC模板检索时间戳值(Retrieving Timestam

2019-10-21 09:06发布

我采取的基于Spring Java项目中的密码恢复功能。 这是我对于方法论

  1. 用户点击忘记密码链接
  2. 在下一屏,用户输入已被用来注册他/她的帐户,他的电子邮件地址
  3. 系统会生成一个UUID标记,并将其与输入的电子邮件地址的用户一起保存在数据库中的表。 此外,到期时间被保存在数据库中的Timestamp
  4. 包括一个链接重设密码的电子邮件发送给用户。 (UUID令牌被包括在电子邮件)
  5. 当用户点击电子邮件中的链接,他/她将被重定向到的密码重置页。
  6. 在该页面中,用户的电子邮件地址会自动通过系统设置的文本字段UUID令牌。 在这里,我需要检查的到期时间是否到期。 为此,我需要比较Timestamp value的当前时间与Timestamp value的是从数据库中使用所采取的到期时间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.TimestampqueryForObject()是由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。

要么

难道我用检查密码重置链接的有效性的错误的方式? 如果是的话是什么来实现它的好办法?

Answer 1:

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

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

您正在使用的代码是不是有效的Java代码,这就是为什么它不会编译的原因。



文章来源: Retrieving Timestamp value from mysql database using Spring JDBC template