2012-03-14 42 views
0

我編寫了一個Java應用程序來將文章添加到Joomla站點。
我正在使用JDBC連接並在Mysql數據庫上運行查詢。
要創建一篇文章,我需要運行_contents表(插入)上的查詢和_assets表(兩個更新&一個插入)上的3個查詢。
應該在_assets表中執行的三個查詢用於將項插入到「嵌套列表樹」中;所以如果其中一個查詢失敗,嵌套列表樹將會中斷。
我的程序正在從遠程系統訪問數據庫(因此互聯網連接問題或其他任何事情都會中斷查詢)。
我怎樣才能確保所有三個查詢運行彼此沒有任何人會錯過?在JDBC中一次運行4個mysql查詢

謝謝

+0

您可以在執行這些查詢之前啓動新的數據庫事務,並在全部執行後提交事務。這樣,如果其中一個失敗,以前的查詢將被取消。 – fajran 2012-03-14 09:57:39

回答

2
+0

不幸MySQL MyISAM引擎不支持事務! – RYN 2012-03-15 20:29:25

+1

好的,你沒有在你的問題中提到MyISAM。如果您無法將相關表更改爲InnoDB,可能最好的做法是在每個查詢後進行檢查,並且只有在成功後才能繼續。 StoredProcs服務器不提供幫助,因爲它們不保證事務行爲(原子性) – moodywoody 2012-03-16 04:42:56

1

您還可以使用在結合你的4個查詢了「存儲過程」 Mysql-Transactions。 這樣我認爲更新成功的可能性更大(在數據庫中,我認爲你的Java方法可能會失敗)。如果你打算使用其他程序/編程語言,你的更新處理將是相同的,你將不必再關心。但是,如果您只是使用一個Java程序,我會在Java端使用事務,因爲對於我來說,Java比sql更容易(特別是如果您使用spring和持久性提供程序,例如hibernate(Spring Transactionshibernate transactions))。

+0

不幸的MySQL MYISAM引擎不支持事務! – RYN 2012-03-15 20:29:13