我有一个应用程序,它从数据库中获取数据并创建excel。我想把从数据库中获取结果集的dao类和用这个结果集创建excel的类分开。
通过这种方式,我将ResultSet从Dao传递到另一个类,以创建excel文件。但是当我运行rs.next()时,它会给我"Closed Resultset:next"错误。我在网上读到传递ResultSet不是一个好主意,所以我只是试着在dao课堂上做它,它起到了作用。
但这样的话,我不喜欢在dao类中做其他任务(锐化excel),也不想创建一个类,然后将它们作为列表发送。所以我的问题是,为什么将结果集传递给其他类或函数是不好的?为什么我在传递并尝试调用rs.next()时出现异常?
总结我的代码如下:
ResultSet rs = myDao.getResult();
ExcelCreator excelCreator = new ExcelCreator();
excelCreator.createExcel(rs);
因为强制打开连接可能导致资源泄漏,而关闭连接则导致关闭结果集。因此,我们使用对象集合来返回它。
为什么会出现"Closed resultset:next"错误,请参阅此处:
当我从未关闭任何时,为什么我得到ResultSet is closed错误
我想您没有使用像Hibernate这样的ORM框架。
在这种情况下,在DAO中映射结果集数据,或者自己构建一个对象映射器,将结果集映射到某个数据传输对象。然后将此对象传递给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。