Как правильно использовать 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

Я уверен, что поможет вам решить вашу проблему

Другие вопросы по тегам