1

问题是,在显示ResultSetwith之后<h:dataTable>,连接保持打开状态。如果我关闭它,它ResultSet也会关闭它。我正在考虑将ResultSet数据复制到一些HashMap/ArrayList组合中。有没有解决这个问题的好方法?

4

3 回答 3

4

实际上,您应该始终在尽可能短的范围内获取关闭Connection,Statement和(最好已经在同一个方法块内),并且永远不要将它们中的任何一个传递到 DAO 类之外。您需要将 映射到代表表格的每一行的其中。这是一个如何映射结果集的基本示例:ResultSetResultSetList<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'svalue属性中使用它。

有关更多示例和见解,您可能会发现以下一篇或两篇文章很有用:http:
//balusc.blogspot.com/2006/06/using-datatables.html
http://balusc.blogspot.com/2008/07/ dao-tutorial-data-layer.html

祝你好运。

于 2009-11-12T13:02:56.267 回答
1

你在使用ResultDataSetModel吗?如果是,请注意在 javadoc 中保留Note that the specified ResultSet MUST be scrollable.

Statement stmt=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

这是ResultDataSetModel 用例的完整示例。

于 2009-11-12T13:09:42.647 回答
1

请查看以下链接: http: //www.coderanch.com/t/478265/JSF/java/Displaying-array-data-tables#2585794

我相信可以帮助您解决问题

于 2012-03-01T07:37:28.463 回答