commit和rollback是數(shù)據(jù)庫(kù)事務(wù)的兩個(gè)概念。
一個(gè)數(shù)據(jù)庫(kù)事務(wù)有開(kāi)始和結(jié)束邊界(boundary), 位于boundary的對(duì)數(shù)據(jù)庫(kù)的各種操作認(rèn)為是對(duì)該事務(wù)的操作。 一個(gè)事務(wù)的要占用數(shù)據(jù)庫(kù)的一些資源,比如可能獲得數(shù)據(jù)庫(kù)的某個(gè)表的某條記錄的lock,如果一個(gè)事務(wù)長(zhǎng)期占用資源而不去釋放,那么對(duì)其他的事務(wù)是不利的,可能會(huì)使得速度很慢。 所以對(duì)數(shù)據(jù)庫(kù)操作的正確做法是讓事務(wù)短小,只做一些應(yīng)該在事務(wù)里邊做的事情,以最快的速度讓一個(gè)事務(wù)結(jié)束,從而釋放該事務(wù)所占有的資源。 如何讓一個(gè)事務(wù)結(jié)束?commit或者rollback。兩者選其一,而且必選其一,才能夠確保一個(gè)事務(wù)被可靠的,安全的終止。commit意味著對(duì)事務(wù)中的操作確定,rollback意味著對(duì)事務(wù)中的操作否定。 JDBC中如何正確的處理事務(wù)? 1。如果需要保持一些操作的原子性,比如轉(zhuǎn)帳就需要原子性,那么必須要將這些操作放在一個(gè)事務(wù)中。 //Connection conn = ...;
2。如果不需要處理原子性的操作,比如查詢(xún) (SELECT),那么只需要conn.setAutoCommit(true);做就可以了。
也可以這樣, 其實(shí)都一樣的.
|
|