我从下面的代码中获得了一个Exhausted结果集。
我现在尝试了一些不同的东西,但却无法找到解决方案 如果我不打电话给歌曲方法它可以工作,但是歌曲方法在它被调用时起作用,无法理解它,希望我能错过一些简单的东西。
public void refreshList() {
rset = po.getProduct();
if (plist.size() > 0) {
for (int i = plist.size() - 1; i >= 0; i--) {
plist.remove(i);
}
}
try {
while (rset.next()) {
songs(rset.getString(1));
CD c = new CD(alist);
Product p = new Product(rset.getString(1),
rset.getString(2),
rset.getString(3),
rset.getDouble(4),
rset.getDouble(5),
rset.getInt(6),
rset.getString(7),
rset.getString(8),
rset.getString(9),
rset.getDouble(10), c);
plist.add(p);
}
} catch (Exception ex) {
System.out.println(ex);
}
}
public void songs(String ID)
{
rset = po.getSongs();
alist = new ArrayList<Song>();
try {
while (rset.next()){
Song s = new Song(rset.getString(1),
rset.getString(2),
rset.getString(3));
slist.add(s);
}
}
catch (Exception ea) {
System.out.println(ea);
}
for(int i = 0; i < slist.size(); i++)
{
if(slist.get(i).getSong_id().equals(ID))
{
alist.add(slist.get(i));
}
}
}
答案 0 :(得分:1)
在refreshList
内while (rset.next())
循环,在每次迭代时,您都有songs(rset.getString(1));
,其本身有while(rset.next()
。这导致结果集耗尽,因为当您从songs()
返回时,您尝试从结果集的当前position
中获取更多数据,而在songs()
中您从while (rset.next())
中获取循环,即检索其所有行。考虑重构代码以避免基于结果集的嵌套循环。