本质上我的问题是我从jdbc查询返回结果集,我想将每一行存储为数组中的对象。当我尝试循环结果集时 - 它只保存在数组中的对象 - 我想这显然是由于while循环在for循环中的事实 - 我尝试重新循环几次但是使用没有快乐。很高兴能找到一种不太复杂和混乱的方法来获取传递给数组的对象。
ResultSet rs = st.executeQuery(query);
Check c = new Check();
rs.last();
int numberOfRows = rs.getRow();
Check checkArray [] = new Check [numberOfRows];
rs.beforeFirst();
for (int i = 0; i < checkArray.length; i++)
{
while (rs.next())
{
c.setAmount(rs.getBigDecimal("AMOUNT"));
c.setCheckNumber(rs.getString("CHECKNUMBER"));
c.setComments(rs.getString("COMMENTS"));
c.setId(rs.getLong("SETID"));
c.setMailTo(rs.getString("MAILTO"));
c.setPayTo(rs.getString("PAYTO"));
c.setProcessed(rs.getBoolean("PROCESSED"));
checkArray[i]= c;
}
}
尝试组合循环:
ResultSet rs = st.executeQuery(query);
rs.last();
int numberOfRows = rs.getRow();
Check checkArray [] = new Check [numberOfRows];
rs.beforeFirst();
while (numberOfRows > 0 && rs.next()) {
Check c = new Check();
c.setAmount(rs.getBigDecimal("AMOUNT"));
c.setCheckNumber(rs.getString("CHECKNUMBER"));
...
checkArray[i]= c;
numberOfRows--;
}
ResultSet
具有getArray功能,所以你可以这样使用。
checkArray[i]= rs.getArray(int columnIndex);
除非你的ResultSet
是CachedRowSet
的一个实例,否则它将不知道有多少行并且将从.getRow()
返回零
您的代码的主要问题是您反复使用相同的Check实例,这意味着您的数组的所有元素都是相同的Check对象。您需要为每一行创建一个新实例
更好地将所有行加载到List
并使用while (resultSet.next())
来控制循环。
如果您绝对需要一个数组,请使用List.toArray()
将List转换为最后的数组
代码的缩写版本是:
List<Check> list = new ArrayList<Check>();
while (rs.next()) {
Check c = new Check();
// set fields of c
list.add(c);
}
Check[] checkArray = list.toArray();