2015-05-09 259 views
0

嗨我只有在DB2中有這個問題,我使用普通的jdbc執行一個簡單的查詢。
然後我獲取ResultSet,並在結果集的獲取過程中,調用另一個方法,該方法又執行另一個查詢(打開和關閉另一個ResultSet)。 當控件返回給調用者時,我的原始ResultSet被關閉,這真的很奇怪。
PS:下面我發佈的代碼可以正常使用Sql Server和DB2 Express,但是在客戶端環境(DB2在Z/OS上)與驅動程序版本3.64.82沒有。錯誤com.ibm.db2.jcc.am.SqlException:[jcc] [t4] [10120] [10898] [3.64.82]操作無效:結果集關閉。 ERRORCODE = -4470,SQLSTATE = null

.......... 
    PreparedStatement pst=conn.prepareStatement(query); 
    ResultSet rs=pst.executeQuery(); 

    while(rs.next()){ 
     System.out.println("Id:"+rs.getInt("ID")); 
     System.out.println("ULTERIORE SPECIFICA "+getUlterioreSpecifica(conn,rs.getInt("ID"))); 
     System.out.println("Desc: "+rs.getString("DESC")); 
     System.out.println("ETA: "+rs.getInt("ETA")); 

    } 
    ........ 

//其他方法

private static String getUlterioreSpecifica(Connection conn, int int1) throws Exception{ 

    String query="select ult_desc from specifica where id=?"; 
    String retVal=""; 
     PreparedStatement pst=conn.prepareStatement(query); 
     pst.setInt(1, int1); 
     ResultSet rs=pst.executeQuery(); 
     while(rs.next()){ 
      retVal=rs.getString(1); 
     } 
     rs.close(); 
     pst.close(); 
    return retVal; 
} 
+0

sql-server標記用於Microsoft SQL Server,使用它標記DB2問題是沒有意義的。 –

+0

您是否禁用連接上的自動提交功能? –

+0

不,我不明白爲什麼我必須禁用自動提交,如果我只執行一個簡單的查詢(選擇)。你能解釋一下嗎?非常感謝 – csciandr

回答

5

你可能會在自動提交模式下工作,併爲這個特定的驅動程序可能默認行爲是在提交關閉的結果集。

因此基於評論中How can I avoid ResultSet is closed exception in Java?

你需要做的是設置ResultSet.HOLD_CURSORS_OVER_COMMIT當您創建的聲明。

+0

嗨,我會盡快嘗試。 只是一個firther問題,我看到的例子,我要聲明的外部聲明是這樣的: 聲明ST1 = con.createStatement( \t \t \t \t ResultSet.TYPE_SCROLL_INSENSITIVE, \t \t \t \t爲ResultSet.CONCUR_READ_ONLY, \t \t \t \t ResultSet.HOLD_CURSORS_OVER_COMMIT); 然後將內部一個這樣的: 聲明ST2 = con.createStatement( \t \t \t \t \t \t ResultSet.TYPE_SCROLL_INSENSITIVE, \t \t \t \t \t \t爲ResultSet.CONCUR_READ_ONLY); 這是正確的嗎?我的意思是,就你所知,將驅動程序版本升級到更新版本可以解決我的問題? – csciandr

+0

外部語句需要具有'ResultSet.HOLD_CURSORS_OVER_COMMIT'。內部可以創建沒有任何標誌。更新驅動程序可以提供幫助,但它不是驅動程序中的錯誤,但有效的行爲,例如提高性能或減少db過熱 –

+0

謝謝,但我必須禁用自動提交,對不對? – csciandr

相關問題