【问题标题】:How to correctly use ResultSet with h:dataTable如何正确使用带有 h:dataTable 的 ResultSet
【发布时间】:2009-11-12 12:43:28
【问题描述】:

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

【问题讨论】:

    标签: jsf jdbc database-connection resultset


    【解决方案1】:

    确实,您应该始终在最短可能的范围内获取关闭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:dataTablevalue属性中使用它。

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

    祝你好运。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        这是ResultDataSetModel用例的完整示例。

        【讨论】:

          猜你喜欢
          • 2018-05-24
          • 2012-03-08
          • 2020-04-26
          • 2020-09-30
          • 2017-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多