【发布时间】:2009-11-12 12:43:28
【问题描述】:
问题是,在显示ResultSet 和<h:dataTable> 之后,连接保持打开状态。如果我关闭它,它也会关闭ResultSet。我正在考虑将ResultSet 数据复制到一些HashMap/ArrayList 组合中。有什么好办法解决这个问题吗?
【问题讨论】:
标签: jsf jdbc database-connection resultset
问题是,在显示ResultSet 和<h:dataTable> 之后,连接保持打开状态。如果我关闭它,它也会关闭ResultSet。我正在考虑将ResultSet 数据复制到一些HashMap/ArrayList 组合中。有什么好办法解决这个问题吗?
【问题讨论】:
标签: jsf jdbc database-connection resultset
确实,您应该始终在最短可能的范围内获取并关闭Connection、Statement和ResultSet(最好已经在相同的方法内)块),你不应该将它们中的任何一个传递到 DAO 类之外。您需要将ResultSet 映射到List<Data>,其中Data 代表表格的每一行。下面是一个如何映射结果集的基本示例:
List<Data> items = new ArrayList<Data>();
...
while (resultSet.next()) {
Data item = new Data();
item.setColumn1(resultSet.getString("column1"));
item.setColumn2(resultSet.getString("column2"));
items.add(item);
}
...
return items;
然后你可以在h:dataTable的value属性中使用它。
有关更多示例和见解,您可能会发现以下一篇或两篇有用的文章:
http://balusc.blogspot.com/2006/06/using-datatables.html
http://balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html
祝你好运。
【讨论】:
请查看以下链接:http://www.coderanch.com/t/478265/JSF/java/Displaying-array-data-tables#2585794
我相信可以帮助您解决问题
【讨论】:
你在使用ResultDataSetModel吗?如果是,请注意在 javadoc 中保持 Note that the specified ResultSet MUST be scrollable。
Statement stmt=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
这是ResultDataSetModel用例的完整示例。
【讨论】: