когда откатывать транзакцию jdbc - PullRequest
1 голос
/ 02 сентября 2010

Я читал интересное заявление в http://download.oracle.com/javase/tutorial/jdbc/basics/transactions.html

Интересная часть:

"Поймать исключение SQLEx говорит вам, что что-то не так, но это не говорит вам, что было или не было совершено. Поскольку вы не можете рассчитывать на тот факт, что ничего не было совершено, вызов метода - это единственный способ убедиться в этом. "

Это действительно так? Если я не вызываю commit, но получил SQLException, то не могу ли я рассчитывать на то, что ничего не будет передано? Что если моя программа завершит работу без вызова commit или rollback? Я думал, что транзакция будет автоматически отменена для меня, но это утверждение лишает меня уверенности.

Ответы [ 2 ]

1 голос
/ 02 сентября 2010

В принципе, любая современная база данных, которую вы бы хотели использовать на уровне изоляции по умолчанию, не демонстрирует такого поведения.Но, в конечном счете, то, что происходит там, находится вне контроля JDBC, и, насколько он знает, вы, возможно, используете Informix 5 или Sybase 1988 года со слоем рекламы под капотом.

Следовательно, из спецификации API языка высокого уровняС этой точки зрения, они должны заявить, что ничто не гарантировано, если вы не используете это должным образом.В основном это говорит о том, что это не будет считаться ошибкой на уровне JDBC , если в результате отказа от соединения ни с фиксацией, ни с откатом некоторые выполненные операторы будут отображаться на уровне базы данных.(Обычно для большинства баз данных мы рассматриваем эту ошибку на уровне базы данных , но, опять же, JDBC - это API высокого уровня.)

0 голосов
/ 02 сентября 2010

вы можете проверить это, чтобы увидеть, что происходит.

Я бы порекомендовал использовать Spring для этого.Он будет автоматически обрабатывать ваши откаты TX для вас.

...