基本上我的问题是我从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;
}
}
答案 0 :(得分:0)
尝试组合循环:
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--;
}
答案 1 :(得分:0)
除非ResultSet
是CachedRowSet
的实例,否则它不会知道有多少行,并且会从.getRow()
返回零
您的代码的主要问题是您重复重复 相同的 Check实例,这意味着您的数组的所有元素都是相同的检查对象。您需要为每个行
创建一个新实例最好将所有行加载到List
并使用while (resultSet.next())
来控制循环。
如果您绝对需要数组,请使用List.toArray()
代码的缩写版本是:
List<Check> list = new ArrayList<Check>();
while (rs.next()) {
Check c = new Check();
// set fields of c
list.add(c);
}
Check[] checkArray = list.toArray();
答案 2 :(得分:0)
ResultSet
具有getArray功能,因此你可以这样使用。
checkArray[i]= rs.getArray(int columnIndex);