Прокручиваемые результирующие наборы предлагают богатые возможности, однако они не свободны от недостатков. В течении всего времени взаимодействия с пользователем соединения с базой данных должно быть открыто. Однако пользователь может отлучиться на длительное время, а открытое соединение будет потреблять ресурсы.
В подобной ситуации целесообразно использовать набор строк(row set). Интерфейс RowSet расширяет интерфейс ResultSet, но набор строк не привязан к соединению с базой данных.
Наборы строк также применяемы в случае, если требуется переместить результаты выполнения запроса на другой уровень сложного приложения или на другое устройство, например, на мобильный телефон. Переместить результирующий набор нельзя, так как он связан с соединением, кроме того, размеры структуры данных могут быть очень велики.
Ниже перечислены интерфейсы, содержащиеся в пакете javax.sql.rowset и расширяющие интерфейс RowSet.
- CachedRowSet позволяет выполнять некоторые операции при отсутствии соединения. Кэшируемые наборы строк рассматриваются в следующих уроках нашего блога.
- WebRowSet представляет собой кэшируемый набор строк, который может быть сохранен в XML-файле. XML-файл может быть передан другому компоненту приложения и открыт с помощью другого объекта WebRowSet.
- Интерфейсы FilteredRowSet и JoinRowSet поддерживают «легковесные» операции с наборами строк, эквивалентные SQL-командам SELECT и JOIN. Эти операции базируются только на данных, содержащихся в наборе строк, и соединение с базой не устанавливается.
- JdbcRowSet представляет собой оболочку для ResultSet. Он определяет методы доступа и модифицирующие методы, превращая результирующий набор в компонент JavaBeans.
В компании Sun Microsystems предполагают, что производители баз данных предоставят эффективные реализации этих интерфейсов. К тому же существуют базовые реализации, которые позволяют использовать наборы строк даже в том случае, если в конкретной базе данных они не поддерживаются. Эти базовые реализации принадлежат пакету com.sun.rowset. Имена классов заканчиваются символам Impl, например, CachedRowSetImpl.