Ответ
Обычно — нет. Стандартный ResultSet предназначен только для чтения данных. Для модификации данных в БД необходимо выполнять SQL-команды UPDATE, INSERT или DELETE через Statement или PreparedStatement.
Правильный подход:
// 1. Получаем данные для чтения
ResultSet rs = statement.executeQuery("SELECT id, name FROM users WHERE id = 1");
if (rs.next()) {
// 2. Определяем новое значение
String newName = "UpdatedName";
// 3. Выполняем отдельный запрос на обновление
PreparedStatement pstmt = connection.prepareStatement("UPDATE users SET name = ? WHERE id = ?");
pstmt.setString(1, newName);
pstmt.setInt(2, rs.getInt("id"));
pstmt.executeUpdate(); // Данные изменяются здесь
}
Исключение: обновляемый ResultSet.
Можно создать ResultSet с поддержкой обновления, указав CONCUR_UPDATABLE. Однако эта возможность поддерживается не всеми СУБД/драйверами и требует явного вызова методов updateXxx() и updateRow().
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM users WHERE id=1");
if (rs.next()) {
rs.updateString("name", "NewName");
rs.updateRow(); // Критически важный вызов для фиксации в БД
}