1、批處理html
概念:將向數據庫表一次性插入多條記錄,而不是一條一條插入的方式,這樣能夠提供效率。java
實現方法:sql
方法摘要數據庫 |
|
|
|
|
|
|
|
方法摘要 |
|
|
|
上面是在MySQL數據庫中管理事務,在實際開發中,更可能是在Java代碼中管理MySQL的事務。也就是說,是利用JDBC來管理MySQL事務。JDBC提供以下三種方法來管理MySQL事務:
方法摘要 |
|
|
|
|
|
|
|
MySQL事務的回滾操做,默認是回滾到開啓事務以前的數據狀態。但在實際開發中,常常須要數據回滾到某個指定的執行狀態。MySQL提供了回滾點(Savepoint)的概念,回滾點相似於遊戲中的存檔。也就是說,設置回滾點後,能夠將事務回滾到指定某個回滾點的數據狀態。下表是回滾點提供的相關方法:
方法摘要 |
|
|
|
|
|
|
|
|
在平常MySQL的事務管理中,若是多線程開啓各自事務操做,而數據庫不負責隔離操做時,常常會出現如下三種常見問題:
髒讀這種操做在實際是很是危險的。例如若是B給A轉帳10000元錢,B開啓一個事務用於轉帳10000元,實際操做後並未提交事務。若是此時A查詢本身的帳戶會發現已經收到B轉帳的10000元,當A作出實際動做(發貨)後,B再將事務回滾,最終致使A損失10000元錢。
例如若是A第一次查詢帳戶爲20000元錢後,B向A轉帳10000元錢,A在第二次查詢帳戶爲30000元錢。先後兩次查詢結果不一致,A可能不知道多出的10000元錢是來自哪裏。
不可重複讀與髒讀的區別在於髒讀讀取的是前一事務未提交的數據,而不可重複讀讀取的是前一事務提交的數據。
例如酒店統計房間預訂數量時,第一次統計爲101間被預訂,A在酒店第一次統計後,預訂了110房間,酒店在A成功預訂110房間後第二次統計,結果爲102間被預訂。致使酒店先後統計數量不一致。
幻讀與不可重複讀的區別在於不可重複讀讀取的是另外一個事務的更新操做,而幻讀讀取的是另外一個事務的插入操做(MySQL數據庫沒法測試到幻讀問題)。
針對上述的三個問題,MySQL數據庫提供了四大隔離級別來解決,這四大隔離級別分別爲:
這個隔離級別可避免髒讀、不可重複讀、虛讀狀況的發生。
這個隔離級別可避免髒讀、不可重複讀狀況的發生。
這個隔離級別可避免髒讀狀況發生。
這個隔離級別最低級別,以上狀況均沒法保證。
SERIALIZABLE –> REPEATABLE READ -> READ COMMITTED -> READ UNCOMMITTED
READ UNCOMMITTED -> READ COMMITTED -> REPEATABLE READ -> SERIALIZABLE
鏈接池能夠極大的改善用戶的 Java 應用程序的性能,同時減小所有資源的使用。鏈接池主要的優勢有:
DBCP(DataBase connection pool),數據庫鏈接池。是 apache 上的一個 java 鏈接池項目。單獨使用dbcp須要3個包:commons-dbcp.jar,commons-pool.jar,commons-collections.jar因爲創建數據庫鏈接是一個很是耗時耗資源的行爲,因此經過鏈接池預先同數據庫創建一些鏈接,放在內存中,應用程序須要創建數據庫鏈接時直接到鏈接池中申請一個就行,用完後再放回去。
二、C3P0
C3P0是一個開源的JDBC鏈接池,它實現了數據源和JNDI綁定,支持JDBC3規範和JDBC2的標準擴展。目前使用它的開源項目有Hibernate,Spring等。
C3P0與DBCP的區別:
dbcp沒有自動回收空閒鏈接的功能。
c3p0有自動回收空閒鏈接功能。
三、JNDI
NDI(Java Naming and Directory Interface)是SUN公司提供的一種標準的Java命名系統接口,JNDI提供統一的客戶端API,經過不一樣的訪問提供者接口JNDI API的實現,由管理者將JNDI API映射爲特定的命名服務和目錄系統,使得Java應用程序能夠和這些命名服務和目錄服務之間進行交互。集羣JNDI實現了高可靠性JNDI,經過服務器的集羣,保證了JNDI的負載平衡和錯誤恢復。在全局共享的方式下,集羣中的一個應用服務器保證本地JNDI樹的獨立性,並擁有全局的JNDI樹。每一個應用服務器在把部署的服務對象綁定到本身本地的JNDI樹的同時,還綁定到一個共享的全局JNDI樹,實現全局JNDI和自身JNDI的聯繫。
JNDI(Java Naming and Directory Interface)是一個應用程序設計的API,爲開發人員提供了查找和訪問各類命名和目錄服務的通用、統一的接口,相似JDBC都是構建在抽象層上。
JNDI(Java Naming and Directory Interface)是容許將一個Java對象綁定到一個JNDI容器(tomcat)中 ,而且爲對象指定一個名稱,經過javax.naming 包 Context 對JNDI 容器中綁定的對象進行查找,經過指定名稱找到綁定Java對象。