簡體   English   中英

Java ResultSet與Postgresql一起使用

[英]Java ResultSet working with 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);
            }
        }
    }
}

我得到了以下錯誤:

線程“主”中的異常org.postgresql.util.PSQLException:此ResultSet已關閉。 在org.postgresql.jdbc2.AbstractJdbc2ResultSet.checkClosed(AbstractJdbc2ResultSet.java:2654)在org.postgresql.jdbc2.AbstractJdbc2ResultSet.next(AbstractJdbc2ResultSet.java:1786)

您能幫我找出問題所在嗎?

JavaDB for jdbc語句說

默認情況下,每個Statement對象只能同時打開一個ResultSet對象。

所以我的猜測是您正在嘗試同時為同一PreparedStatement打開太多結果集。

編輯:

Postgres jdbc驅動程序文檔似乎確認了這一點:

您可以根據需要多次使用一個Statement實例。 您可以在打開連接后立即創建一個連接並將其用於連接的整個生命周期。 但是您必須記住,在給定的時間,每個Statement或PreparedStatement只能存在一個ResultSet。

據我所知,您正在使用ResultSet對象存儲語句結果,然后將其作為參數傳遞給遞歸函數調用。 因此,基本上,您是在覆蓋變量並丟失對它的引用。 您應該編寫sql語句以檢索所需的數據,或者不將相同的ResultSet對象傳遞給遞歸調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM