2014-01-17 50 views
1

我在嘗試更新某些信息時遇到錯誤。錯誤如下:爲什麼它爲第二個查詢拋出異常?

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
    at java.util.ArrayList.RangeCheck(Unknown Source) 
    at java.util.ArrayList.get(Unknown Source) 
    at com.app.dao.RolesDAO.getUserRoleByUserID(RolesDAO.java:42) 
    at com.app.business.UserRolesBusiness.updateInformation(UserRolesBusiness.java:21) 
    at com.app.business.UserRolesBusiness.main(UserRolesBusiness.java:29) 

調試後,我看到業務層正常工作以檢索用戶ID。但它後來未能更新信息。我的代碼執行是這樣的:

業務層實現:

public void updateInformation(String userName, String roleName) { 

    Users user = dao1.getUserInfo(userName); 
    String userIDString = Integer.toString(...); 

    Roles updateRole = dao2.getUserRoleByUserID(userIDString); 
    updateRole.setRole(roleName); 
    r.updateRole(updateRole); 

} 

DAO層的實現:

getUserInfo方法:

..... 
user = ... query.list().get(0); 
.... 

getUserRoleByUserID方法:

.... 
role = ... query.list().get(0); 
.... 

拋出異常「IndexOutOfBoundsException」的原因是什麼以及如何解決問題。它成功執行第一個查詢但不執行第二個查詢。任何建議?

回答

2

您正在調用query.list().get(0)兩次而未檢查列表的大小。如果其中一個是空的,結果將得到一個IndexOutOfBoundsException。在嘗試獲取第一個列表元素之前,調用isEmpty()方法或驗證size()大於零。

相關問題