Как правильно использовать ResultSet с h:dataTable
Проблема в том, что после отображения ResultSet
с <h:dataTable>
соединение остается открытым. Если я закрою его, он закроет ResultSet
тоже. Я думаю о копировании ResultSet
данные в некоторые HashMap
/ArrayList
комбо. Есть ли хороший способ справиться с этой проблемой?
3 ответа
На самом деле, вы всегда должны приобрести и закрыть 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
"s value
приписывать.
Для большего количества примеров и идей вы можете найти одну или обе из следующих статей полезными:
http://balusc.blogspot.com/2006/06/using-datatables.html
http://balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html
Удачи.
Вы используете ResultDataSetModel? Если да, обратите внимание, что в Javadoc остается Note that the specified ResultSet MUST be scrollable
,
Statement stmt=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
Вот полный пример использования ResultDataSetModel.
Пожалуйста, проверьте следующую ссылку: http://www.coderanch.com/t/478265/JSF/java/Displaying-array-data-tables
Я уверен, что поможет вам решить вашу проблему