2016-10-04 121 views
0

在數據庫中查詢一欄,我想查詢例如一整列的數據:錯誤而使用彈簧

SELECT USER_USERNAME FROM xxxx WHERE USER_USERNAME=? 

我收到提示

org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0 

吾道

@Override 
public String getAllUsers(UserRegistration uname) { 
    System.out.println(uname.getUserName()); 

    return template.queryForObject(GET_USER_USERNAME, new Object[] { uname.getUserName() }, 
      new BeanPropertyRowMapper<String>(String.class)); 

} 

我通過xml文件注入屬性。

我控制器

@RequestMapping(method = RequestMethod.POST,value = "/checkUserName", headers = "Accept=application/json") 
public org.weber.nag.model.UserRegistration checkUserName(@RequestBody org.weber.nag.model.UserRegistration userReg) { 
    userDao.getAllUsers(userReg); 
    return userReg; 
} 

所以從當我試圖通過從郵遞員所花費的值到控制器,並從那裏我將它傳遞給我的DAO的用戶名來比較上述該名稱是否退出或沒有。名稱成功達到我的道,但我得到一個錯誤。

於是,我就捕捉到了異常

@Override 
public String getAllUsers(UserRegistration uname) { 
    System.out.println(uname.getUserName()); 
    try { 
     return template.queryForObject(GET_USER_USERNAME, new Object[] { uname.getUserName() }, 
       new BeanPropertyRowMapper<String>(String.class)); 
    } catch (EmptyResultDataAccessException e) { 
     System.out.println("uname already exists"); 
     return "user exists"; 
    } 


} 

但每次打印

"uname already exists" 

時間,不論是否給予用戶名的有以dB與否。

回答

1

在JdbcTemplate的,queryForInt,queryForLong,queryForObject所有這些方法預計執行的查詢回報之一,只有一排。 如果您沒有得到會導致EmptyResultDataAccessException的行。

從EmptyResultDataAccessException

當結果被預期具有在 至少一排(或元件),但零行(或元素)拋出數據訪問例外是的javadoc實際上 返回。

確保您使用查詢應只返回一行。

如果完全是不是可能那麼使用查詢方法而不是queryForObject。

提示:要調試此操作,請在SQL IDE中運行相同的查詢直接

+0

使用查詢對象,它得到執行。謝謝。 – mark

0
@Override 
public String getAllUsers(UserRegistration uname) { 
    try { 
     template.queryForObject(GET_USER_USERNAME, new Object[] { uname.getUserName() }, 
       new BeanPropertyRowMapper<String>(String.class)); 
     System.out.println("uname exists"); 
     return "user name is NOT available."; 
    } catch (EmptyResultDataAccessException e) { 
     System.out.println("uname do not exists"); 
    } 

    return "user is available"; 

}