Назад к вопросам
Aston
Junior — Middle
61
Имели ли опыт использования операторов транзакций при работе с базами данных?
Компании, где спрашивали
Ответ от нейросети
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) {
// операции с базой, которые будут выполнены в рамках одной транзакции
}
}
Такой подход позволяет избежать ручного управления транзакциями и уменьшает вероятность ошибок.