2009-11-12 29 views
1

問題是,在顯示ResultSet<h:dataTable>後,連接保持打開狀態。如果我關閉它,它也會關閉ResultSet。我正在考慮將ResultSet數據複製到一些HashMap/ArrayList組合中。有沒有解決這個問題的好方法?如何使用h:dataTable正確使用ResultSet

回答

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:dataTablevalue屬性。

更多的例子和見解,你可能會發現有用的在下面的文章中一個或兩個:
http://balusc.blogspot.com/2006/06/using-datatables.html
http://balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html

好運。

+0

謝謝,作品真的很好! – 2009-11-12 14:14:31

1

您使用的是ResultDataSetModel?如果是的話請注意,在javadoc停留Note that the specified ResultSet MUST be scrollable

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

下面是ResultDataSetModel usecase的完整示例。