error java.lang.ArrayIndexOutOfBoundsException

时间:2014-03-02 08:32:24

标签: java

我正在将数据库存储在数据库中,我正在尝试检索其中的所有数据 当我尝试检索数据库中的所有记录时,为什么会出现此错误? Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 185 at warsh01.selectStmt01.getObjectIDsFromDB(selectStmt01.java:83)

  public static int[] getObjectIDsFromDB (String Dbnum) throws SQLException{
    String selectSQL = "SELECT ID FROM " + Dbnum +.tabName ";
         dbConnection = getDBConnection();
         preparedStatement = dbConnection.prepareStatement(selectSQL);
         ResultSet rs = preparedStatement.executeQuery();  
            rs.last();
            int[] rsIds=new int[rs.getRow()];
            rs.beforeFirst();
            int counter = 1;
            while (rs.next()) {
            rsIds[counter]=rs.getInt(1);
            counter++; // the error is pointing in this line 
            }
             return  rsIds;
      }

在主要方法中,当我尝试运行它时,我得到了上述异常

 int [] IdsArray ;
    pathIdsArray = getObjectIDsFromDB ("za");
   List<ObjClass>  objItm=new ArrayList<>();
   for (int i = 1; i < IdsArray.length; i++) {
    Item1 = new ObjClass ();
    objectItem1.color=Color.blue;
    objectItem1.LoadFromDB("za", IdsArray[i]);       
    objItm.add(Item1);
    }

3 个答案:

答案 0 :(得分:2)

我认为您应该简单地将counter初始化为0而不是1:)

假设您的ResultSet 4行rsIdsArray int,从rsIds[0]rsIds[3]
通过在counter循环中初始化1while (rs.next())并输入 4次,您:

  • 从不使用rsIds[0]
  • 最后在最后一次迭代中访问rsIds[4](你不能)。

希望它有所帮助!

答案 1 :(得分:1)

ResultSets的索引从1开始。但是Java数组的索引从0开始。您使用从1开始的计数器迭代结果集,并在每次迭代时初始化rsIds[counter]。您应该初始化rsIds[counter - 1](或者将计数器设置为0)。

请注意,使用List而不是数组会更容易:

List<Integer> result = new ArrayList<Integer>();
ResultSet rs = preparedStatement.executeQuery();  
while (rs.next()) {
    result.add(rs.getInt(1));
}

答案 2 :(得分:0)

在Java数组中,零索引,即第一个元素具有索引0。您正在使用counter变量来访问数组的位置,但使用1初始化它。

int counter = 1;
while (rs.next()) {
   rsIds[counter]=rs.getInt(1);
   counter++;
}

让行数例如是5,然后你有一个数组有五个“位置”0,1,2,3,4。但是在while循环中你正在访问1,2,3,4, 5 - 导致违反数组边界。