我們有一個Java類,它循環遍歷包含Store信息的結果集,然後開始爲每個相應的存儲處理ascii文件。對於每個商店處理ascii文件需要大約5分鐘。我們遇到的問題是,在處理第一個商店的ascii文件並獲取下一個結果集後,我們得到一個SQLException,表示「DSRA9110E:ResultSet已關閉」。DSRA9110E:ResultSet已關閉
我們的代碼基本上是這樣的。
private void startProcess() throws Exception {
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement("SELECT STORE_CODE FROM STORE");
rs = pstmt.executeQuery();
while (rs != null && rs.next()) {
System.out.println("Processing store " + rs.getString("STORE_CODE"));
try {
processStoreSalesFile();
} catch (Exception e) {
conn.rollBack();
e.printStackTrace();
}
if (rs != null) {
System.out.println("ResultSet is not null");
}
}
} finally {
if (rs != null) {
rs.close();
rs = null;
}
if (pstmt != null) {
pstmt.close();
pstmt = null;
}
}
}
當發生錯誤時,我確實看到系統打印行「ResultSet is not null」。但是當它得到下一個ResultSet時,它說ResultSet被關閉。
我試圖註釋掉調用processStoreSalesFile()的代碼,我們沒有得到這個錯誤,並且它能夠在不拋出任何異常的情況下獲取下一個ResultSet。
我嘗試的下一個嘗試是取消註釋對方法processStoreSalesFile()的調用,然後從文件系統中刪除任何ascii文件,以便程序沒有任何可處理的內容。也沒有例外拋出。
我們的設置是WebSphere-Informix。我們有另一個設置WebSphere-Oracle,並沒有任何問題。
我懷疑的是ResultSet有超時或者它只是不想等待進程完成並自行關閉。
更新1: 在processStoreSalesFile()方法內部,有一個conn.commit()調用來提交記錄。是否當一個提交被調用時,ResultSet將被關閉?在WAS管理控制檯中,我已經將數據源屬性resultSetHoldability添加爲值'1'。但是ResultSet仍然關閉。
我希望有人能幫助我在這裏:(
感謝。
我剛試過。我做了pstmt.setQueryTimeout(0)和pstmt.setQueryTimeout(1000)。我仍然收到錯誤:「[12/23/11 4:04:16:915 MYT] 00000017 SystemOut O com.ibm.websphere.ce.cm.ObjectClosedException:DSRA9110E:ResultSet已關閉。」 –
連接可能關閉。可以本地化連接對象並重試。 – nayakam