当我尝试运行以下代码时,出现“ 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]
(因为i
在while
循环中声明了)。我怀疑那是故意的。
另外,您的异常处理也很糟糕-仅捕获异常而不执行任何操作是一个坏主意,就像在大多数情况下捕获Exception
本身一样。
然后就是这个问题:
String eindWaarden[] = new String[length];
for (int i = 0; i<= length; i++) {
eindWaarden[i] = waarden[i];
}
这将始终失败,因为您正在访问
eindWaarden[length]
,该地址将不在数组末尾。有效索引为0
到length - 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/