我們有一個spring bean,它在啓動時從Postgresql(8.4)數據庫加載應用程序消息。 豆的定義是這樣的: <豆....初始化方法=「loadMessages」 >意外的結果集在Spring Web應用程序中關閉異常
的代碼相當直截了當:
get a connection (we are using a dbcp pool)
Create a statement (plain jdbc, nothing special)
execute the query, get the result set
while(resultSet.next())){
cacheMap.put(resultSet.getString("column1"), resultSet.getString("column2"));
}
代碼有時會拋出一個結果是內部封閉例外while在應用程序啓動時循環。 它工作正常,沒有任何異常使用Postgresql 8.4.2,但在使用Postgresql 8.4.8時大部分時間(並非總是)拋出異常。
我們在運行Windows 7或2008服務器的4臺不同計算機上測試它,Tomcat 6.0.32,最新版本的Java 1.6,所有數據庫服務器都運行在同一臺機器上。 結果集包含大約8000行(兩列;字符變化(200)和字符變化(1000))。 這裏有什麼可能是錯誤的?
- 在完成結果集處理之前,池是否可能關閉連接或重新使用連接?
- 或者它可以是與數據庫版本相關的東西?
順便說一句,我們改變了代碼來加載消息時,他們是第一次使用,而不是應用程序啓動,它工作正常。所以只有在啓動時使用init-method調用代碼時纔會引發此異常。
在此先感謝
感謝您的回答。我們只使用spring管理的bean。結果設置關閉的異常不會引發第一個結果。緩存得到部分填充。例如,如果我們通常有8k行,處理2k行左右(不是實際的數字)後拋出異常。不知何故結果集,我認爲該語句在循環過程中被關閉。文檔說,如果在同一個連接上執行另一個查詢,語句會被關閉。也許連接池將連接交給另一個執行另一個查詢的線程。但是這種情況對我來說沒有意義。 –