将ResultSet传递给其他方法

时间:2016-04-15 12:01:39

标签: java oracle resultset

我有一个从数据库获取数据并创建excel的应用程序。我想要从db获取结果集的separete dao类以及使用此结果集创建excel的类。

通过这种方式,我将ResultSet从Dao传递到另一个类来创建excel文件。但是当我运行rs.next()时,它会给我"关闭结果集:下一个"错误。 我在网上看到传递ResultSet并不是一个好主意因此我只是尝试在dao类中进行它并且它有效。

但是这样我就不喜欢在dao类中做其他任务(creasting excel)而且我不想创建一个类然后将它们作为列表发送。所以我的问题是为什么将结果集传递给其他类或函数是不好的?当我通过它并尝试调用rs.next()时为什么会出现异常?

总结我的代码如下:

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

2 个答案:

答案 0 :(得分:1)

因为强制连接打开和关闭连接可能导致资源泄漏导致关闭结果集。因此我们使用对象集合来返回它。

答案 1 :(得分: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。