SQL查询 - 如果查询不成功,则需要能够返回任何内容

时间:2017-01-25 19:47:21

标签: java jdbc

我正在填充“用户详细信息”页面,此时,我以空用户身份登录,并且它一直在破坏,因为此查询必须返回一些内容。 我想这样做,如果它是空的,它将返回"&#34 ;;而不是打破。

我有一个模糊的想法如何做到这一点,但我需要帮助!当用户登录时查询肯定有效,因为我已经测试了代码,并且当有有效用户时它会填充。

我认为应该是这样的:

 @Override
        public UserDetails fetchUserById(int userId) {
            String query = "select ID, LOGIN_ID, EMAIL_ID, FIRST_NAME, MIDDLE_NAME, LAST_NAME, decode(is_primary, 1, 'true', 'false') IS_PRIMARY, decode(status, 1, 'true', 'false') IS_ACTIVE from user_details where ID = ?";
    List<UserDetails> strLst = return jdbcTemplate.queryForObject(query, new RowMapper<UserDetails>() {

                    @Override
                    public UserDetails mapRow(ResultSet rs, int rowNum) throws SQLException {
                        UserDetails userDetails = new UserDetails ();
                        userDetails .setId(rs.getInt("ID"));
                        userDetails .setIntranetId(rs.getString("LOGIN_ID"));
                        userDetails .setEmailId(rs.getString("EMAIL_ID"));
                        userDetails .setFirstName(rs.getString("FIRST_NAME"));
                        userDetails .setMiddleName(rs.getString("MIDDLE_NAME"));
                        userDetails .setLastName(rs.getString("LAST_NAME"));
   userDetails.setPrimaryAnalyst(Boolean.valueOf(rs.getString("IS_PRIMARY")));
                        userDetails.setStatus(Boolean.valueOf(rs.getString("IS_ACTIVE")));
                        return userDetails;
                }
    }, userId);

    if (strLst.isEmpty()) {
        return " ";
    } else {
        return strLst.get(0);

    }
}

这是我的查询代码:

 @Override
        public UserDetails fetchUserById(int userId) {
            String query = "select ID, LOGIN_ID, EMAIL_ID, FIRST_NAME, MIDDLE_NAME, LAST_NAME, decode(is_primary, 1, 'true', 'false') IS_PRIMARY, decode(status, 1, 'true', 'false') IS_ACTIVE from user_details where ID = ?";
                RowMapper<UserDetails> rowMapper = new RowMapper<UserDetails>(){

                    @Override
                    public UserDetails mapRow(ResultSet rs, int rowNum) throws SQLException {
                        UserDetails userDetails = new UserDetails ();
                        userDetails .setId(rs.getInt("ID"));
                        userDetails .setIntranetId(rs.getString("LOGIN_ID"));
                        userDetails .setEmailId(rs.getString("EMAIL_ID"));
                        userDetails .setFirstName(rs.getString("FIRST_NAME"));
                        userDetails .setMiddleName(rs.getString("MIDDLE_NAME"));
                        userDetails .setLastName(rs.getString("LAST_NAME"));
   userDetails.setPrimaryAnalyst(Boolean.valueOf(rs.getString("IS_PRIMARY")));
                        userDetails.setStatus(Boolean.valueOf(rs.getString("IS_ACTIVE")));
                        return userDetails;
                };
                return jdbcTemplate.queryForObject(query, rowMapper, userId);

        }

null用户读取的错误 HTTP状态500 - 请求处理失败;嵌套异常是org.springframework.dao.EmptyResultDataAccessException:结果大小不正确:预期1,实际0

1 个答案:

答案 0 :(得分:0)

您只需使用EmptyResultDataAccessException并返回空字段即可。像这样:

@Override
public UserDetails fetchUserById(int userId) {
    String query = "select ID, LOGIN_ID, EMAIL_ID, FIRST_NAME, MIDDLE_NAME, LAST_NAME, " 
                   + " decode(is_primary, 1, 'true', 'false') IS_PRIMARY, " 
                   + " decode(status, 1, 'true', 'false') IS_ACTIVE "
                   + " from user_details where ID = ?";
    try{
        RowMapper<UserDetails> rowMapper = new RowMapper<UserDetails>(){
            @Override
            public UserDetails mapRow(ResultSet rs, int rowNum) throws SQLException {
                UserDetails userDetails = new UserDetails ();
                userDetails .setId(rs.getInt("ID"));
                userDetails .setIntranetId(rs.getString("LOGIN_ID"));
                userDetails .setEmailId(rs.getString("EMAIL_ID"));
                userDetails .setFirstName(rs.getString("FIRST_NAME"));
                userDetails .setMiddleName(rs.getString("MIDDLE_NAME"));
                userDetails .setLastName(rs.getString("LAST_NAME"));
                userDetails.setPrimaryAnalyst(Boolean.valueOf(rs.getString("IS_PRIMARY")));
                userDetails.setStatus(Boolean.valueOf(rs.getString("IS_ACTIVE")));
                return userDetails;
            };
            return jdbcTemplate.queryForObject(query, rowMapper, userId);
        }
    }catch(EmptyResultDataAccessException e){
        UserDetails userDetails = new UserDetails ();
        //fill the userDetails fields with the empty values
        return userDetails;
    }
}