问题是,在ResultSet
显示<h:dataTable>
后,连接处于打开状态。如果我关闭它,它也会关闭ResultSet
。我正在考虑将ResultSet
数据复制到某些HashMap
/ ArrayList
组合中。有没有办法解决这个问题?
答案 0 :(得分:4)
确实,您应始终获取和关闭最短可能范围内的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
的{{1}}属性中使用它。
有关更多示例和见解,您可能会发现以下一篇或两篇文章都很有用:
http://balusc.blogspot.com/2006/06/using-datatables.html
http://balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html
答案 1 :(得分:1)
您使用的是ResultDataSetModel吗?如果是,请注意在javadoc中保持Note that the specified ResultSet MUST be scrollable
。
Statement stmt=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
以下是ResultDataSetModel用例的完整示例。
答案 2 :(得分:1)
请检查以下链接:http://www.coderanch.com/t/478265/JSF/java/Displaying-array-data-tables#2585794
我相信可以帮助您解决问题