Ответ
При создании Statement или PreparedStatement в JDBC можно настроить три ключевых параметра ResultSet, определяющих его поведение.
1. Тип курсора (ResultSet Type)
TYPE_FORWARD_ONLY(по умолчанию): Курсор движется только вперед.TYPE_SCROLL_INSENSITIVE: Курсор может двигаться в любом направлении (previous(),absolute()), но не отражает изменения, сделанные другими транзакциями в базе данных после открытияResultSet.TYPE_SCROLL_SENSITIVE: Курсор скроллируется и отражает изменения в данных, сделанные другими транзакциями.
2. Режим конкурентности (Concurrency Mode)
CONCUR_READ_ONLY(по умолчанию): Набор результатов доступен только для чтения.CONCUR_UPDATABLE: Данные вResultSetможно обновлять, удалять или вставлять новые строки с помощью методовupdateXXX(),updateRow(),deleteRow(),insertRow(). Поддержка зависит от СУБД и запроса.
3. Удержание курсора (Cursor Holdability)
Определяет, остается ли ResultSet открытым после вызова Connection.commit().
HOLD_CURSORS_OVER_COMMIT: Курсоры остаются открытыми.CLOSE_CURSORS_AT_COMMIT: Курсоры закрываются автоматически.
Пример создания настраиваемого Statement:
// Создание Statement с прокручиваемым и обновляемым ResultSet
Statement stmt = connection.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE
);
ResultSet rs = stmt.executeQuery("SELECT id, name FROM employees");
// Использование возможностей
rs.absolute(5); // Переход к 5-й строке
rs.updateString("name", "Новое Имя");
rs.updateRow(); // Фиксация изменения в БД
Важно: Поддержка CONCUR_UPDATABLE и TYPE_SCROLL_SENSITIVE зависит от драйвера базы данных и самого запроса (например, запрос к одной таблице обычно поддерживается).