当我尝试运行以下代码时,出现“ java.lang.ArrayIndexOutOfBoundsException

ResultSet res = null;
    String[] waarden = new String[20];
    int length = 0;
    String query = "SELECT rd_datum, rd_locatie FROM racedag;";
    res = Database.executeSelectQuery(query);
    try{
        while (res.next()){
            int i = 1;
            waarden[i] = res.getString(1);
            i++;
            waarden[i] = res.getString(2);
            i++;
        }

        }
    catch (Exception e){
            }
    finally{
        length = waarden.length;
    }
    String eindWaarden[] = new String[length];
    for (int i = 0; i<= length; i++){
        eindWaarden[i] = waarden[i];
    }
    return eindWaarden;
}


我不知道为什么。

最佳答案

您没有显示异常发生的位置,但是,有一次您只写过waarden[1]waarden[2](因为iwhile循环中声明了)。我怀疑那是故意的。

另外,您的异常处理也很糟糕-仅捕获异常而不执行任何操作是一个坏主意,就像在大多数情况下捕获Exception本身一样。

然后就是这个问题:

String eindWaarden[] = new String[length];
for (int i = 0; i<= length; i++) {
    eindWaarden[i] = waarden[i];
}


这将始终失败,因为您正在访问eindWaarden[length],该地址将不在数组末尾。有效索引为0length - 1(含)。如果要保留该循环(我对此表示怀疑),请将<=更改为<

哦,length总是20,但是您检索到的结果很多-因为那是waarden的长度。

同样,尽管此声明有效:

String eindWaarden[]


通常不建议使用这种样式。将所有类型信息保存在一起,就像对waarden所做的一样。

如果只使用List<String>,则代码会更好:

String query = "SELECT rd_datum, rd_locatie FROM racedag;";
ResultSet res = Database.executeSelectQuery(query);
List<String> results = new ArrayList<String>();
// Removed try block: declare that your method throws SqlException or whatever
while (res.next()) {
    results.add(res.getString(1));
    results.add(res.getString(2));
}
// Change the method declaration to have a return type of List<String>
return results;

关于java - 我无法解决此问题:java.lang.ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8925553/

10-10 04:07