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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...