1. 程式人生 > >C3P0和dbutils資料庫連線池封裝的使用(一)

C3P0和dbutils資料庫連線池封裝的使用(一)

首先用資料庫連線池管理Connection,我們就可以重複使用Connection了,有了連線池我們就可以不用自己建立Connection,
然後用完把它歸還給連線池就行了,首先用c3p0資料庫連線池,需要向專案中匯入兩個包:mchange-commons-java-0.2.11.jar和c3p0-0.9.5.2.jar,如果用的資料庫是oracle的話,需要匯入三個包需要再加上一個:c3p0-oracle-thin-extras-0.9.5.2.jar
這裡附上我的百度雲的c3p0的下載連結http://pan.baidu.com/s/1eStATf8
然後在src資料夾下放置一個c3p0-config.xml的檔案,這裡附上程式碼:

<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
    <default-config> 33 
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">
root</property> <property name="password">[email protected]</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>

然後就是修改資料庫連線字串和登陸資料庫的賬戶和密碼。然後就是把每一次
 要連線到資料庫的程式碼給封裝到jdbcUtils類中,這樣就可以直接呼叫獲取資料的連線物件了。下面試jdbcUtils的程式碼了:
 


import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * 使用本類的方法,必須提供c3p0-copnfig.xml檔案
 * @author qdmmy6
 */
public class JdbcUtils {
    // 餓漢式
    private static DataSource ds = new ComboPooledDataSource();

    /**
     * 它為null表示沒有事務
     * 它不為null表示有事務
     * 當開啟事務時,需要給它賦值
     * 當結束事務時,需要給它賦值為null
     * 並且在開啟事務時,讓dao的多個方法共享這個Connection
     */
    private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();

    public static DataSource getDataSource() {
        return ds;
    }

    /**
     * dao使用本方法來獲取連線
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
        /*
         * 如果有事務,返回當前事務的con
         * 如果沒有事務,通過連線池返回新的con
         */
        Connection con = tl.get();//獲取當前執行緒的事務連線
        if(con != null) return con;
        return ds.getConnection();
    }

    /**
     * 開啟事務
     * @throws SQLException 
     */
    public static void beginTransaction() throws SQLException {
        Connection con = tl.get();//獲取當前執行緒的事務連線
        if(con != null) throw new SQLException("已經開啟了事務,不能重複開啟!");
        con = ds.getConnection();//給con賦值,表示開啟了事務
        con.setAutoCommit(false);//設定為手動提交
        tl.set(con);//把當前事務連線放到tl中
    }

    /**
     * 提交事務
     * @throws SQLException 
     */
    public static void commitTransaction() throws SQLException {
        Connection con = tl.get();//獲取當前執行緒的事務連線
        if(con == null) throw new SQLException("沒有事務不能提交!");
        con.commit();//提交事務
        con.close();//關閉連線
        con = null;//表示事務結束!
        tl.remove();
    }

    /**
     * 回滾事務
     * @throws SQLException 
     */
    public static void rollbackTransaction() throws SQLException {
        Connection con = tl.get();//獲取當前執行緒的事務連線
        if(con == null) throw new SQLException("沒有事務不能回滾!");
        con.rollback();
        con.close();
        con = null;
        tl.remove();
    }

    /**
     * 釋放Connection
     * @param con
     * @throws SQLException 
     */
    public static void releaseConnection(Connection connection) throws SQLException {
        Connection con = tl.get();//獲取當前執行緒的事務連線
        if(connection != con) {//如果引數連線,與當前事務連線不同,說明這個連線不是當前事務,可以關閉!
            if(connection != null &&!connection.isClosed()) {//如果引數連線沒有關閉,關閉之!
                connection.close();
            }
        }
    }
}

下面就是匯入dbutils了。
            
            
                                                                                                         
            

相關推薦

C3P0dbutils資料庫連線封裝的使用

首先用資料庫連線池管理Connection,我們就可以重複使用Connection了,有了連線池我們就可以不用自己建立Connection, 然後用完把它歸還給連線池就行了,首先用c3p0資料庫連線池,需要向專案中匯入兩個包:mchange-commons-j

Druid以及Druid常見的資料庫連線對比轉載

寫的灰常好非常細,關鍵是還有各種資料庫連線池的對比,條理比較清晰。 1. Druid是什麼? Druid是Java語言中最好的資料庫連線池。Druid能夠提供強大的監控和擴充套件功能。 2. 在哪裡下載druid 3. 怎麼獲取Druid的原始碼 Druid

資料庫連線使用springboot

轉自:https://blog.csdn.net/u014209205/article/details/80625963 1. 為什麼要使用資料庫連線池         使用資料庫連線池主要考慮到程式與資料庫建立連線

Java資料庫連線比較c3p0,dbcp,proxoolBoneCP

詳見:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp21 Java框架資料庫連線池比較(c3p0,dbcp和proxool,BoneC) 現在常用的開源資料連線池主要有c3p0,dbcp,proxool

Java框架資料庫連線比較c3p0,dbcpproxool

現在常用的開源資料連線池主要有c3p0,dbcp和proxool三種,其中:  ¨         hibernate開發組推薦使用c3p0;  ¨         spring開發組推薦使用dbcp (dbcp連線池有weblogic連線池同樣的問題,就是強行關閉連

flask中的CBV,flash,Flask-Session,WTForms - MoudelForm,DBUtils 資料庫連線

CBV和flash from flask import Flask,request,render_template,redirect,url_for,flash,get_flashed_messages from flask import views app = Flask(__name__) #

DBCPDruid資料庫連線使用

需要用到的jar包,commons-dbcp2-*.jar、commons-logging-*.jar、commons-pool2-*.jar,*代表版本號 DataSourceTest類 pa

在tomcat中配置MySQLoracle資料庫連線的異同

一、在tomcat中配置MySql資料庫連線池 Java程式碼: public Connection conn = null; public Connection getConnection()throws ClassNotFoundException, S

經典的單例模式c3p0來控制資料庫連線

 1.新建ConnectionManager.javapackage com.c3p0.datapools; //資料庫連線池 單例模式 import java.sql.Connection; import java.sql.SQLException; import

mysql資料庫連線異常問題總結 mysql資料庫連線異常問題總結

mysql資料庫連線異常問題(總結) 1.1 前言     最近專案由1個數據源增加至了3個數據源(連線池使用C3P0),結果各種奇葩的資料庫連線問題接踵而至,為防止將來再次遇到同樣的問題不犯同樣錯誤,現總結如下。 1.2  An attempt by

Qt連線MySQL程式設計及資料庫效能調優

之前整理過一篇Qt下資料庫程式設計基礎 :最近在進行單元測試,所以把遇到的一些問題整理出來,主要是關於資料庫的 1.遠端連線資料庫 連線語句是: mysql -h 192.168.xx.xx(IP地址) -P 3306(埠) -u remoteuser(登入使用

mysql資料庫連線異常問題總結

1.1 前言     最近專案由1個數據源增加至了3個數據源(連線池使用C3P0),結果各種奇葩的資料庫連線問題接踵而至,為防止將來再次遇到同樣的問題不犯同樣錯誤,現總結如下。 1.2  An attempt by a client to checkout a Connection has timed ou

druid連線bug

MySQL Server 5.7.21 + mysql-connector-java 5.1.38 + druid 1.0.8 一.配置步驟: 1.pom.xml 引入相關jar包:      <!-- mysql資料庫的驅動包 start -->     

資料庫操作sql封裝insert

** 資料庫插入(insert)sql封裝 ** 1. 封裝工具類 public class DBUtil { public String column; //插入列名 public String values; //插入值 public Str

Android多執行緒操作sqlite資料庫連線框架的種設計思路

我們在Android應用程式開發當中經常會用到資料庫,一般在有兩種主要開發思路。 第一種:每次需要對資料庫操作的時候建立連線,操作完成後,馬上關閉連線。 這個方式一般用於不怎麼頻繁操作資料庫的情況,用完後馬上關閉達到節省系統資源的目的。 第二種:應用程式一

spring配置詳解-連線配置轉載

一、連線池概述  資料庫連線池概述:   資料庫連線是一種關鍵的有限的昂貴的資源,這一點在多使用者的網頁應用程式中體現得尤為突出。對資料庫連線的管理能顯著影響到整個 應用程式的伸縮性和健壯性,影響到程式的效能指標。資料庫連線池正是針對這個問題提出來的。   資料庫連線池負責

一個例子告訴你什麼是封裝,繼承多型(C++ 程式碼例項)

add by WJB   date 2018/08/30 面向物件的三大特性:封裝,繼承和多型; 封裝:將事物擁有的屬性和動作隱藏起來,只保留特定的方法與外界聯絡。 繼承:子類可以擁有父類的屬性和方法; 多型:以說是“一個介面,多種實現”或者說是父類的引用變數可以指向

大檔案 and 多下載任務的封裝---執行緒封裝ThreadPool,TheadManager

ThreadManager 前段時間對三級快取機制做了系統的分析,但是對於網路下載的問題還有很多,比如今天遇到的問題,針對一些需要下載大檔案,並且需要進行多執行緒下載的應用來說,(比如,像一

Weblogic連線屬性PinnedToThread 導致連線連線不斷增長

最近專案遇到棘手的問題,weblogic連線池不斷增長導致連線爆滿。 後來經過仔細查詢發現weblogic連線池設定勾選了PinnedToThread 屬性導致的,下面先看下官方對這個屬性的介紹吧: PinnedToThread 是一個能夠改善效能的選項,它啟用執行執行緒

qt 利用執行緒鎖搭建客戶端框架

    做客戶端開發很久了,一直在嘗試搭建一個更好的客戶端架構;在看了qt的QQucikAsyicImageProvider這個類的官方示例後發現,qt的QRunable類在run函式中也可以通過傳送訊號的方式與主執行緒通訊,之前看過的說明都說QRunable不好與主執行緒互