我从以下代码中获得了 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));
}
}
}
最佳答案
在 refreshList
中,您有 while (rset.next())
循环,在它的每次迭代中,您都有 songs(rset.getString(1)) ;
,它本身有 while(rset.next()
)。这会导致结果集耗尽,因为当您从 songs()
返回时,您会尝试获取来自结果集当前位置
的更多数据,而在songs()
中,您脱离了while (rset.next())
循环,即检索其所有行。考虑重构代码以避免基于结果集的嵌套循环。
关于java - 在 while(rset.next) 内调用方法时耗尽结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23095498/