Ответ
ResultSet — это объект, представляющий результирующую таблицу данных, полученную после выполнения SQL-запроса через Statement или PreparedStatement. Он предоставляет курсор для итерации по строкам результата.
Основные характеристики и типы:
При создании Statement можно задать два параметра, определяющих поведение ResultSet:
| Параметр | Возможные значения | Описание |
|---|---|---|
| Тип курсора | TYPE_FORWARD_ONLY (по умолчанию) |
Курсор движется только вперед. |
TYPE_SCROLL_INSENSITIVE |
Курсор может двигаться в любом направлении, но не "видит" изменения, сделанные другими транзакциями после открытия. | |
TYPE_SCROLL_SENSITIVE |
Курсор может двигаться и "видит" изменения в реальном времени (редко используется, зависит от драйвера БД). | |
| Режим конкурентности | CONCUR_READ_ONLY (по умолчанию) |
Набор данных доступен только для чтения. |
CONCUR_UPDATABLE |
Данные в ResultSet можно обновлять, и изменения будут синхронизированы с базой данных. |
Пример использования:
// Создание прокручиваемого ResultSet только для чтения
Statement stmt = connection.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY
);
ResultSet rs = stmt.executeQuery("SELECT id, name FROM users");
// Итерация по строкам
while (rs.next()) {
int id = rs.getInt("id"); // Получение значения по имени столбца
String name = rs.getString(2); // Получение значения по индексу (начиная с 1)
System.out.println(id + ": " + name);
}
// Прокрутка к первой строке и проверка пустого результата
if (rs.first()) {
System.out.println("Первая запись: " + rs.getString("name"));
}
// Важно закрывать ресурсы
rs.close();
stmt.close();
Важно: ResultSet, Statement и Connection — это ограниченные ресурсы. Их необходимо закрывать в блоке finally или, что предпочтительнее, использовать конструкцию try-with-resources (доступна с Java 7).