Sobes.tech
Назад к вопросам
Junior — Middle
61

Имели ли опыт использования операторов транзакций при работе с базами данных?

Компании, где спрашивали
AstonAston

Ответ от нейросети

sobes.tech AI

Да, имел опыт использования операторов транзакций в Java при работе с базами данных, в частности через JDBC и Spring.

В JDBC транзакции управляются вручную с помощью методов setAutoCommit(false), commit() и rollback(). Пример:

Connection conn = null;
try {
    conn = dataSource.getConnection();
    conn.setAutoCommit(false); // начало транзакции

    // выполнение нескольких операций
    PreparedStatement ps1 = conn.prepareStatement("INSERT INTO users(name) VALUES (?)");
    ps1.setString(1, "Иван");
    ps1.executeUpdate();

    PreparedStatement ps2 = conn.prepareStatement("UPDATE accounts SET balance = balance - ? WHERE user_id = ?");
    ps2.setBigDecimal(1, new BigDecimal("100.00"));
    ps2.setInt(2, 1);
    ps2.executeUpdate();

    conn.commit(); // фиксация транзакции
} catch (SQLException e) {
    if (conn != null) {
        conn.rollback(); // откат при ошибке
    }
    throw e;
} finally {
    if (conn != null) {
        conn.setAutoCommit(true);
        conn.close();
    }
}

В Spring Framework для управления транзакциями обычно используют аннотацию @Transactional, которая упрощает работу и автоматически обрабатывает commit/rollback:

@Service
public class UserService {

    @Transactional
    public void transferMoney(int fromUserId, int toUserId, BigDecimal amount) {
        // операции с базой, которые будут выполнены в рамках одной транзакции
    }
}

Такой подход позволяет избежать ручного управления транзакциями и уменьшает вероятность ошибок.