本质上,我的问题是从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();