将结果集中的每一行存储为数组中的对象



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

除非ResultSetCachedRowSet的实例,否则它不知道有多少行,并且会从.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();

相关内容

  • 没有找到相关文章

最新更新