JavaWeb基礎之JdbcUtils工具類final

来源:http://www.cnblogs.com/stefan95/archive/2017/09/22/7576366.html
-Advertisement-
Play Games

JdbcUtils工具類3.0最終版,添加了事務相關功能和釋放鏈接。最終版本可以直接打成jar包,在後面的基本項目都會使用該工具類 1. JdbcUtils代碼 2. 在src下給出c3p0-config.xml配置文件 3. 總結 從第一個基本版本1.0到加入連接池2.0再到現在的事務,一步一個腳 ...


JdbcUtils工具類3.0最終版,添加了事務相關功能和釋放鏈接。最終版本可以直接打成jar包,在後面的基本項目都會使用該工具類

1. JdbcUtils代碼

 1 /**
 2  * 最終版
 3  * @author hui.zhang
 4  *
 5  */
 6 public class JdbcUtils {
 7         // 配置文件的預設配置,必須給出c3p0-config.xml
 8         private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
 9         
10         //事務專用連接
11         private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
12         /**
13          * 使用連接池返回一個連接對象
14          * @return
15          * @throws SQLException
16          */
17         public static Connection getConnection() throws SQLException {
18             Connection con = tl.get();
19             //當con比等於null,說明已經開啟了事務
20             if(con != null) return con;
21             return dataSource.getConnection();
22         }
23 
24         /**
25          * 返回連接池對象
26          * @return
27          */
28         public static DataSource getDataSource() {
29             return dataSource;
30         }
31         
32         /**
33          * 開啟事務
34          * 1. 獲取一個Connection,設置它的setAutoCommit(false)
35          * 2. 要保證dao中使用的連接是我們剛剛創建的
36          * @throws SQLException 
37          */
38         public static void beginTransaction() throws SQLException{
39             Connection con = tl.get();
40             if(con != null) throw new SQLException("已經開啟了事務,請不要重覆開啟!");
41             con = getConnection();
42             con.setAutoCommit(false);
43             tl.set(con);
44         }
45         
46         /**
47          * 提交事務
48          * 1. 獲取beginTransaction提供的Connection,然後調用commit方法
49          * @throws SQLException 
50          */
51         public static void commitTransaction() throws SQLException{
52             Connection con = tl.get();
53             if(con == null) throw new SQLException("還沒有開啟事務,不能提交!");
54             con.commit();
55             con.close();
56             tl.remove();
57         }
58         
59         /**
60          * 回滾事務
61          * 1. 獲取beginTransaction提供的Connection,然後調用rollback方法
62          * @throws SQLException 
63          */
64         public static void rollbackTransaction() throws SQLException{
65             Connection con = tl.get();
66             if(con == null) throw new SQLException("還沒有開啟事務,不能回滾!");
67             con.rollback();
68             con.close();
69             tl.remove();
70         }
71         
72         /**
73          * 釋放連接
74          * @param connection
75          * @throws SQLException 
76          */
77         public static void releaseConnection(Connection connection) throws SQLException{
78             Connection con = tl.get();
79             //判斷是不是事務專用連接,如果是不用關
80             if(con == null)
81                 connection.close();
82             //如果con != null,說明有事務,需要判斷參數連接是否與con相同
83             //不同 說明不是事務專用鏈接
84             if(con != connection)
85                 connection.close();
86         }
87 }

2. 在src下給出c3p0-config.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!-- 預設配置信息 -->
    <default-config>
    <!-- 連接四大參數 -->
        <property name="user">root</property>
        <property name="password">123</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql:///mydb</property>
    
    <!-- 池參數配置 -->
    <property name="acquireIncrement">3</property> 
    <property name="initialPoolSize">10</property> 
    <property name="minPoolSize">2</property> 
    <property name="maxPoolSize">10</property>
    </default-config>
</c3p0-config> 

3. 總結

  從第一個基本版本1.0到加入連接池2.0再到現在的事務,一步一個腳印。每個版本都應該留下。。。溫故而知新!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學習VGA顯示圖片的過程中,遇到了一個小問題,我在顯示屏上開了一個60x60的框,放了一張圖片進去顯示,但是最終的結果如下圖所示。 出現了一個豎黑邊,看了看代碼,分析了一下邏輯沒問題,然而看這個顯示那肯定是有問題的,然後模擬了一下看看,時序圖如下。 正確的時序 錯誤的時序 我這是的是當行計數器記到2 ...
  • 註:本人用Python3.4作為學習版本,以下學習心得只適用於Python3.4。 寫下這篇博客,意味著我即將步入函數式編程的大門。 說起函數,首先想到的莫過於讀書至今依然圍繞在我身邊的那個“函數”。數學計算中的函數,簡單地說,就是對給定數的一種人為約定的運演算法則,將給定的數通過某種變化得到一個新的 ...
  • Dima and Magic Guitar CodeForces - 366E 題意: http://blog.csdn.net/u011026968/article/details/38716425http://vawait.com/2013/11/codeforces-366e/http://w ...
  • 如圖: 在列印等腰三角形基礎之上列印鏤空等腰三角形 列印等腰三角形在此不做贅述,博客地址: http://www.cnblogs.com/realjanushu/p/7576556.html 列印等腰三角形源碼: 在此基礎上觀察 如圖: 鏤空的三角形: 特點頂層與最底層不會鏤空,除了頂層與最底層其他 ...
  • <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8 ...
  • 轉載請註明原創出處,謝謝! 經過 4 次跳票,歷經曲折的 Java 9 正式版終於發佈了!今天看著到處都是jdk9發佈了,新特性說明,心想這麼好的蹭熱度計劃能錯過嘛,哈哈,所以就發了這篇文章。 目前jdk9和jvm9的規範都還沒有出來,很多細節估計還不清楚,基本就是通過官方介紹,看的。 所以各位看官 ...
  • 如圖: 第一步:分析行數 4行 迴圈列印4層 第二步:分析 * 的個數 1->3->5->7 2*n-1 第三步:彙總列印直角三角形 第四步: 觀察 (2*n-2)/2 3->2->1 列印0的直角倒三角 第五步:彙總列印等腰三角形 最後將0替換成" "(空格),編譯再運行就好了 ...
  • 使用python web做Restful 風格,很簡單,採用Flask框架輕鬆實現一個RESTful的服務。 Restful相關介紹請查看:https://www.ibm.com/developerworks/library/ws-restful/index.html 1. 環境搭建 首先需要準備環 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...