我有一个从数据库获取数据并创建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);
答案 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。