2016-04-15 125 views
1

我有一個從數據庫獲取數據並創建excel的應用程序。我想分離dao類,它從db中獲得resultSet,以及用這個結果集創建excel的類。將ResultSet傳遞給其他方法

以這種方式,我從Dao傳遞ResultSet到另一個類來創建excel文件。但是當我運行rs.next()時,它會給我「封閉的結果集:下一個」錯誤。 我在互聯網上看到,傳遞ResultSet不是個好主意,因此我只是嘗試在dao類中做到這一點,它的工作。

但這樣我不喜歡在dao類中做其他任務(creasting excel),我不想創建一個類,然後將它們作爲列表發送。所以我的問題是爲什麼把結果集傳遞給其他類或函數是不好的?爲什麼我通過它並嘗試調用rs.next()時會得到異常?

總結一下我的代碼看起來像這樣:

ResultSet rs = myDao.getResult(); 
ExcelCreator excelCreator = new ExcelCreator(); 
excelCreator.createExcel(rs); 
+0

檢查您的DAO類中是否關閉了連接,因爲關閉連接也可能導致關閉ResultSet –

回答

1

因爲它可以通過強制連接打開和關閉的連接會導致關閉的結果集導致資源泄漏。因此我們使用Object的集合來返回它。

1

爲什麼你得到「關閉結果集:未來」的錯誤,在這裏看到:

Why am I getting ResultSet is closed error when I never closed any

我沒有使用Hibernate等一些ORM框架設想。

在這種情況下,將結果集數據映射到DAO中,或者自己構建一個對象映射器,它將ResultSet映射到某個數據傳輸對象。然後將此對象傳遞給createExcel()方法。

事情是這樣的:

ResultSet rs = myDao.getResult(); 
List<ExcelDto> excelDtos = new ArrayList<>(); 
ExcelDto excelDto; 
while (rs.next()) {  
    excelDto = new ExcelDto();  
    dto.setXCol(rs.getString("XColumn")) 
    excelDtos.add(dto); 
} 
excelCreator.createExcel(excelDtos); 

然後在excelCreator你可以用一個ArrayList代替ResultSet的工作。