Sobes.tech
Junior — Middle
95

¿Tiene experiencia en el uso de operadores de transacción al trabajar con bases de datos?

Empresas donde se preguntó
AstonAston

Respuesta de la IA

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) {
        // операции с базой, которые будут выполнены в рамках одной транзакции
    }
}

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