java - 在 while(rset.next) 内调用方法时耗尽结果集

标签 java sql jdbc

我从以下代码中获得了 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/

相关文章:

java - Intellij 项目和模块之间的区别

sql - 计算表中每一列的值

mysql - 使用 4 个 JOINS 和优化 MySQL 查询

java - 在 Netbeans 8 中运行时,即使将其 jar 放在 Tomcat home/lib 文件夹中,也找不到 JDBC 驱动程序

java - 使用反射广义重写 Object.equals() 方法的安全性

java - 如何拆分句子?

java - 类型安全 Class<?扩展实体>数组可能吗?

sql - 调用多列时 Hive SQL 不同列语法错误

java - 每次在持有这些面板的 JFrame 中单击任何按钮时,刷新/重新创建卡片布局中的所有面板

java - 立即创建 SQL Server 死锁的最小 Java JDBC 程序?