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

问题描述 投票:1回答:3

本质上我的问题是我从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;
}
}
java sql arrays loops resultset
3个回答
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--;
}

0
投票

ResultSet具有getArray功能,所以你可以这样使用。

    checkArray[i]= rs.getArray(int columnIndex);

0
投票

除非你的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();
© www.soinside.com 2019 - 2024. All rights reserved.