java Spring JDBC 获取从查询返回的值

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12057775/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 07:27:19  来源:igfitidea点击:

Spring JDBC getting values returned from query

javasqlspringjdbcspring-jdbc

提问by devdar

Hi i have a query where i select values from the database and i would like to do a comparison with the selected data. I am able to create the query and pass in the parameters but i am still having some problems accessing the values returned from the query. Can someone tell me if i am on the right track, i think i wrote the last two statements incorrectly.

嗨,我有一个查询,我从数据库中选择值,我想与所选数据进行比较。我能够创建查询并传入参数,但在访问从查询返回的值时仍然遇到一些问题。有人能告诉我我是否在正确的轨道上,我想我写错了最后两个陈述。

    String sql = "SELECT userName, password FROM tblusers WHERE userName = ? AND password = ? ";



    Object[] parameters = new Object[] {login.getUserName(), login.getPassword()};

    String dbUserName = (String)getJdbcTemplate().queryForObject(
            sql, parameters, String.class);

    String dbPassword = (String)getJdbcTemplate().queryForObject(
            sql, parameters, String.class);

回答by davioooh

If your query returns only one record, I suggest you to use:

如果您的查询只返回一条记录,我建议您使用:

queryForMap(String sql, Object... args)

queryForMap(String sql, Object... args)

Take a look at javadoc.

看看javadoc。

For your specific problem this should work:

对于您的具体问题,这应该有效:

Map<String,Object> results = 
        getJdbcTemplate().queryForMap(
            "SELECT userName, password FROM tblusers WHERE userName = ? AND password = ?"
            , login.getUserName()
            , login.getPassword());

String dbUserName = (String)results.get("userName");
String dbPassword = (String)results.get("password");

回答by zmf

Your query would return two strings, if that is what you intend then you should convert your results into an object, OR just query for username and password one at at time. Here is how you can use a row-mapper to get both username and password at the same time.

您的查询将返回两个字符串,如果这是您的意图,那么您应该将结果转换为一个对象,或者一次只查询一个用户名和密码。以下是如何使用行映射器同时获取用户名和密码。

    public class CustomRowMapper implements RowMapper {

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


    String sql = "SELECT userName, password FROM tblusers WHERE userName = ? AND password =        ? ";

    Object[] parameters = new Object[] {login.getUserName(), login.getPassword()};

    User u = (User) getJdbcTemplate().queryForObject(sql, parameters, new CustomRowMapper());

Otherwise ...

否则 ...

String sql = "SELECT userName FROM tblusers WHERE userName = ? AND password = ? ";

String userName = getJdbcTemplate().queryForString(sql, parameters);

String passwordSql = String sql = "SELECT password FROM tblusers WHERE userName = ? AND password = ? ";

String password= getJdbcTemplate().queryForString(sql, parameters);