如何正确使用带有h:dataTable的ResultSet

时间:2009-11-12 12:43:28

标签: jsf jdbc database-connection resultset

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

3 个答案:

答案 0 :(得分:4)

确实,您应始终获取关闭最短可能范围内的ConnectionStatementResultSet(最好已经在同一个方法块中)并且你永远不应该在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

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