【问题标题】:Spring MVC 3.0 Getting Values Out From Sql QuerySpring MVC 3.0 从 Sql 查询中获取值
【发布时间】:2012-08-02 22:07:23
【问题描述】:

我是使用 Spring MVC 3.0 的新手。我正在编写一个自定义身份验证类,我想知道如何将 SQL 查询中的值提取到变量中?这是我要实现的目标的示例,并且省略了我要询问的一些代码;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.log4j.Logger;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

import com.crimetrack.DAO.LoginDAO;
import com.crimetrack.business.Login;

public class JdbcLoginDAO extends JdbcDaoSupport implements LoginDAO {

    private final Logger logger = Logger.getLogger(getClass()); 
    String dbUserName;
    String dbPassword;

    public boolean AuthenticateUser(Login login) {
        logger.debug("Authenticating User");

        String sql = "SELECT userName, password FROM tblofficers WHERE userName = :userName AND password = :password ";

        //code for parameters : userName and password using login.getPassword() and login.getUsername()
        //and code to get vaules out from query for comparison


        if (dbUserName == login.getUserName()) {

            if (dbPassword == login.getPassword()){
                return true;
            }
        }

        return false;

    }


    public static class LoginMapper implements ParameterizedRowMapper<Login>{

         public Login mapRow(ResultSet rs, int rowNum) throws SQLException {
                Login dbLogin = new Login();
                dbLogin.setUserName(rs.getString("userName"));
                dbLogin.setPassword(rs.getString("password"));
                return dbLogin;
            }       
    }

}

【问题讨论】:

  • 我知道它并不能真正回答您的问题,但如果您已经拥有 Spring 堆栈,我强烈推荐 Spring Security 框架。它会很好地管理你所有的 auth/autz 问题。
  • 我正在查看,但在这里我想实现自定义登录,因为我想为用户分配自定义功能。感谢您的评论,我正在看的东西也非常感谢
  • 我第二个 Oliviers 的建议,并且做一个普通的 JDBC 查询与 spring 没有多大关系。这是一个示例,说明您将如何完成 devdaily.com/java/edu/pj/jdbc/jdbc0003 。我建议您不要将密码原样保存在数据库中,而是在将密码存储在数据库中时使用某种哈希函数。
  • 你也可以使用 Spring Security 来做到这一点。 Spring Security 提供了框架(会话管理、URL 保护等),但您仍然必须通过 UserDetails 服务提供用户详细信息、角色等。
  • 我不确定,但我正在做一些研究,我想出了这个我不知道是否有人能告诉我我是否正确: String dbUserName = (String)getJdbcTemplate().queryForObject( sql , 新对象[] { login.getUserName() }, String.class); String dbPassword = (String)getJdbcTemplate().queryForObject( sql, new Object[] { login.getPassword() }, String.class);从查询中获取值并将参数也传递给它

标签: java sql spring parameters resultset


【解决方案1】:

使用 JDBCTemplate 和 BeanPropertyRowMapper 将查询作为“登录”类的另一个实例返回,然后比较对象。

您必须查看 JDBCTemplate 来定义数据库连接,但最终会如下所示:

UserLogin authenticLogin = (UserLogin) db_connection.queryForObject(sql, new BeanPropertyRowMapper(UserLogin.class));

if (userLogin.getPassword() == authenticLogin.getPassword()) {
    return true
}

基本上,BeanPropertRowMapper 将创建一个类的新实例,设置与查询返回的列同名的任何属性。

【讨论】:

    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 2013-07-29
    • 2012-08-16
    • 2018-05-08
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多