Как правильно использовать ResultSet с h:dataTable

Проблема в том, что после отображения ResultSet с <h:dataTable> соединение остается открытым. Если я его закрою, он тоже закроет ResultSet. Я думаю о том, чтобы скопировать данные ResultSet в какую-нибудь комбинацию HashMap/ArrayList. Есть ли хороший способ справиться с этой проблемой?


person Daniel Szalay    schedule 12.11.2009    source источник


Ответы (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 value.

Дополнительные примеры и идеи вы можете найти полезными в одной или обеих следующих статьях:
http://balusc.blogspot.com/2006/06/using-datatables.html
http://balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html

Удачи.

person BalusC    schedule 12.11.2009

Пожалуйста, проверьте следующую ссылку: http://www.coderanch.com/t/478265/JSF/java/Displaying-array-data-tables#2585794

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

person gouravg    schedule 01.03.2012

Используете ли вы ResultDataSetModel? Если да, обратите внимание, что в javadoc остается Note that the specified ResultSet MUST be scrollable.

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

Вот полный пример ResultDataSetModel вариант использования.

person cetnar    schedule 12.11.2009