2012-06-23 6 views
2

Я вставки данных в три таблицы т.е.откат транзакции с использованием MySQL в Java

Transaction 
TransactionEntry 
Payment 

Сначала я вставить данные в транзакции, а затем получить идентификатор транзакции, а затем вставить данные в TransactionEntry , после этого вставка в Оплата

Предположим, что в первых двух таблицах данные вставлены успешно. Затем разбивка сервера.

Как мы можем вернуть все записи? мы можем контролировать его программно или база данных имеет функцию по умолчанию, чтобы контролировать этот тип ситуации?

Как добиться согласованности и целостности?

Какая конструкция каркаса, в java, может управлять этим типом ситуации?

MySQLJava EE

+0

JDBC поддерживает откат. – EJP

ответ

2

MySQL поддерживает транзакции обычным способом. Откройте транзакцию в начале и зафиксируйте в конце, если что-то произойдет посередине, ничего не будет опубликовано.

Поскольку вы используете Java EE, вам нужно выяснить, предлагает ли ваш Java-клиент mysql или не строил его в операторах. Если нет, то используйте

SET AUTOCOMMIT=0; 

... statements ... 

COMMIT; 
+0

-1 При использовании JDBC вы всегда должны использовать метод setAutoCommit (false) 'и методы' commit() 'или' rollback() ', а не собственные команды базы данных. См. Документацию: http://docs.oracle.com/javase/6/docs/api/java/sql/Connection.html (_ «Приложения не должны ссылаться на команды SQL напрямую, чтобы изменить конфигурацию соединения, когда есть доступный метод JDBC . "_) –

+0

Исследую, В java connection.setAutoCommit (false); connection.commit(); и в исключении connection.rollback(); Я ОТКАЗАЛ СТРАНИЦУ ПОСЛЕ МОЙ КОММУНИКАТЫ, НО @MarkRotteveel УЖЕ ПОЛУЧИЛ ОТВЕТ;) –

+0

@MarkRotteveel, вы правы, поэтому я сказал, что IF j2ee не предоставляет встроенные методы ... :-) – Sebas

2

Вам необходимо отключить автоматическую фиксацию и фиксацию после того как ваша единица работы выполняется (или откат, когда это не удалось).

Это должно быть что-то вроде:

Connection con = ...; //set earlier 
con.setAutoCommit(false); 
... 
try { 
    //insert here 
    ... 
    con.commit(); 
} catch (Exception e) { 
    con.rollback(); 
    // other exception handling 
} 
+0

Уважаемый, я использую MVC. У меня есть один контроллер, который вызывается тремя способами из служб, и у каждой службы есть соединение? то как ваше предлагаемое решение работает? –

+0

Я думаю, вы должны задать другой вопрос и включить эту информацию в свой вопрос. Вы можете посмотреть распределенные транзакции (XA) или функции управления транзакциями Spring. –

Смежные вопросы