gpt4 book ai didi

Java ResultSet 与 postgresql 一起工作

转载 作者:行者123 更新时间:2023-11-29 14:03:38 25 4
gpt4 key购买 nike

我的数据库中有一个表,其中包含 2 列:uid1 - 某人的 ID,uid2 - 他的 friend 。

我想创建一个列表,其中我是某人的 friend - 直到 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);
}
}
}
}

我得到了以下错误:

Exception in thread "main" org.postgresql.util.PSQLException: This ResultSet is closed. at org.postgresql.jdbc2.AbstractJdbc2ResultSet.checkClosed(AbstractJdbc2ResultSet.java:2654) at org.postgresql.jdbc2.AbstractJdbc2ResultSet.next(AbstractJdbc2ResultSet.java:1786)

你能帮我找出问题所在吗?

最佳答案

Javadoc对于 jdbc 语句说

By default, only one ResultSet object per Statement object can be open at the same time.

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

编辑:

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

You can use a single Statement instance as many times as you want. You could create one as soon as you open the connection and use it for the connection's lifetime. But you have to remember that only one ResultSet can exist per Statement or PreparedStatement at a given time.

关于Java ResultSet 与 postgresql 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8477856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com