2016-04-15 166 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的工作。

相关问题