JDBC проверяет, может ли соединение гарантировать, что оно зафиксируется без ошибок

#java #jdbc #transactions #connection

#java #jdbc #транзакции #соединение

Вопрос:

Есть ли способ проверить, зафиксируется ли соединение без создания исключения?

Я знаю, что отсроченные ограничения внешнего ключа применяются только при фиксации транзакции.

Предоставляет ли JDBC (java 6) API какой-либо метод для запроса базы данных, будут ли все операции с момента начала подключения (или последней фиксации) успешными?

С уважением, Пабло.

Ответ №1:

Вы не можете этого сделать. Процесс фиксации занимает некоторое время, и в любой момент соединение может быть потеряно (представьте, что кто-то отключает кабель). Так что никаких гарантий здесь нет. Просто перехватывайте исключения — вот почему они были изобретены.

Комментарии:

1. @vladimit: Итак, как XADataSource обрабатывает двухфазную фиксацию?

2. @vladmir: Возможно, я неправильно сформулировал свой вопрос: в случае отложенных ограничений есть ли какой-либо способ запросить базу данных через jdbc для выполнения проверки ограничений?

Ответ №2:

Если вы используете базу данных Oracle, вы можете проверить, есть ли какие-либо нарушения отложенных ограничений, прежде чем фиксировать с помощью:

 Statement stmt = connection.createStatement();
stmt.executeUpdate("SET CONSTRAINTS ALL IMMEDIATE");