我正在将数据库存储在数据库中,我正在尝试检索其中的所有数据
当我尝试检索数据库中的所有记录时,为什么会出现此错误?
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);
}
答案 0 :(得分:2)
我认为您应该简单地将counter
初始化为0
而不是1
:)
假设您的ResultSet
4行。
rsIds
是Array
四 int
,从rsIds[0]
到rsIds[3]
。
通过在counter
循环中初始化1
到while (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 - 导致违反数组边界。