为什么它会为第二个查询抛出异常?

时间:2014-01-17 20:17:35

标签: java hibernate

我在尝试更新某些信息时遇到错误。错误如下:

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"以及如何解决问题。它成功执行了第一个查询,但没有执行第二个查询。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您正在调用query.list().get(0)两次,而不检查列表的大小。如果其中一个为空,则结果将为IndexOutOfBoundsException。在尝试获取第一个列表元素之前,请调用isEmpty()方法或验证size()是否大于零。