Java ResultSet与postgresql一起工作



我有一个表在我的数据库中,它拥有2列:uid1 -某人的id, uid2 -他的朋友。

我想创建一个列表,其中我的朋友-直到5深度连接。

所以我构建了以下递归方法:
    private void recursive(int theUid,ResultSet rs,ArrayList<Integer> friends,int count,int next,PreparedStatement pstmt) throws SQLException{
        if(count>=1 && next==theUid){
            return;
        }
        else if(count>=DEPTH_OF_CONNECTION){
            return;
        }
        else{
            pstmt.setInt(1,next);
            rs=pstmt.executeQuery();
            count++;
            while(rs.next()) {
                friends.add(rs.getInt(1));
                recursive(theUid,rs,friends,count,rs.getInt(1),pstmt);
            }
        }
    }
}

,我得到以下错误:

线程"main"异常关闭ResultSet。在org.postgresql.jdbc2.AbstractJdbc2ResultSet.checkClosed (AbstractJdbc2ResultSet.java: 2654)org.postgresql.jdbc2.AbstractJdbc2ResultSet.next (AbstractJdbc2ResultSet.java: 1786)

你能帮我找出问题是什么吗?

Javadoc for jdbc语句说

默认情况下,每个Statement对象只能同时打开一个ResultSet对象。

所以我的猜测是你试图在同一时间为同一个PreparedStatement打开太多的结果集。

编辑:

Postgres jdbc driver doc似乎证实了这一点:

你可以任意多次使用一个Statement实例。您可以在打开连接后立即创建一个,并在连接的生命周期内使用它。但是您必须记住,在给定的时间内,每个Statement或PreparedStatement只能存在一个ResultSet。

据我所知,您正在使用ResultSet对象来存储语句结果,然后将其作为参数传递给递归函数调用。所以基本上你重写了变量,失去了对它的引用。您应该编写sql语句来检索您需要的数据,或者不将相同的ResultSet对象传递给递归调用。

相关内容

  • 没有找到相关文章

最新更新