1. 程式人生 > >C3P0&Druid——兩種資料庫連線池的使用方法

C3P0&Druid——兩種資料庫連線池的使用方法

資料庫連線池——C3P0&Druid

(一) 資料庫連線池

每一個事物都有其存在的意義,在初學jdbc的時候,我們建立資料庫連線物件後,會對其進行釋放,但是資料庫連線的建立和關閉是非常消耗資源的,而且頻繁的操作會使得效能變得低下,資料庫連線池可以幫我們解決這樣的問題

(1) 概念

資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重複使用一個現有的資料庫連線,而不是再重新建立一個;釋放空閒時間超過最大空閒時間的資料庫連線來避免因為沒有釋放資料庫連線而引起的資料庫連線遺漏。這項技術能明顯提高對資料庫操作的效能。

簡單理解:就是一個存放資料庫連線的容器,當用戶需要訪問資料庫的時候,容器提供連線物件給使用者用,之後使用者將連線物件歸還給容器

(2) 使用

A:實現 javax.sql 包下的 DataSource 介面

  • 方法:獲取連線:getConnection()
  • 方法:歸還連線:Connection.close()

注意:在連線池中使用connection.close()方法,不代表關閉連線,代表歸還連線

B:我們可以使用一些開源的資料庫廠商提供的實現

  • C3P0
  • Druid (來自阿里巴巴)

(3) C3P0

A:首先匯入三個jar包 c3p0-0.9.5.2.jar 、mchange-commons-java-0.2.12.jar、資料庫驅動jar包

B:修改配置檔案

C建立資料庫連線池物件——ComboPooledDataSource()

D獲取連線——getConnection()

package cn.ideal.datasource.c3p0;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class C3P0Demo {

    private static DataSource comboPooledDataSource = null;

    static{
        //不指定則使用預設XML配置
        //資料庫連線池物件 ComboPooledDataSource
        comboPooledDataSource = new ComboPooledDataSource();
    }

    public static Connection getConnection() throws SQLException {
        //獲取連線
        return comboPooledDataSource.getConnection();
    }

    public static void main(String[] args) throws SQLException {
        System.out.println(getConnection());
    }
}

//測試輸出日誌及內容

(4) Druid

package cn.ideal.datasource.druid;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;

public class DruidDemo {
    public static void main(String[] args) throws Exception {
        //載入配置檔案
        Properties pro = new Properties();
        InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
        pro.load(is);

        //獲取連線池物件
        DataSource ds = DruidDataSourceFactory.createDataSource(pro);

        //獲取連線
        Connection connection =ds.getConnection();

        System.out.println(connection);
    }
}

試著用Druid寫一個工具類

package cn.ideal.datasource.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCUtils {

    private static DataSource ds = null;

    static {
        //載入配置檔案
        Properties properties = new Properties();
        try {
            properties.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            ds = DruidDataSourceFactory.createDataSource(properties);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 獲取連線
     */
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    /**
     * 釋放資源
     */

    public static void close(Statement statement, Connection connection) {
        close(null, statement, connection);
    }

    public static void close(ResultSet resultSet, Statement statement, Connection connection) {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

工具類測試

package cn.ideal.datasource.test;

import cn.ideal.datasource.utils.JDBCUtils;

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

public class JDBCUtilsTest {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        try {
            //獲取連線
            connection = JDBCUtils.getConnection();
            //定義sql
            String sql = "INSERT INTO account VALUES(NULL,?,?)";
            //獲取preparedStatement物件
            preparedStatement = connection.prepareStatement(sql);
            //給?賦值
            preparedStatement.setString(1, "lisi");
            preparedStatement.setString(2, "2000");
            //執行sql
            int count = preparedStatement.executeUpdate();
            System.out.println(count);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(preparedStatement,connection);
        }
    }
}

結尾:

如果內容中有什麼不足,或者錯誤的地方,歡迎大家給我留言提出意見, 蟹蟹大家 !^_^

如果能幫到你的話,那就來關注我吧!(系列文章均會在公眾號第一時間更新)

在這裡的我們素不相識,卻都在為了自己的夢而努力 ❤

一個堅持推送原創Java技術的公眾號:理想二旬不止

相關推薦

C3P0&Druid——資料庫連線的使用方法

資料庫連線池——C3P0&Druid (一) 資料庫連線池 每一個事物都有其存在的意義,在初學jdbc的時候,我們建立資

Spring SpringMVC配置Druid資料來源(資料庫連線

之前分享過Spring boot整合使用Druid的方法,現在分享下Spring,SpringMVC配置Druid的方法。我們一般常用的資料來源(資料庫連線池)有Druid,HikariCP。 web.xml增加如下配置語句: <filter> <fil

Druid - SpringBoot配置資料庫連線druid

關於Druid     DRUID是阿里巴巴開源平臺上一個資料庫連線池實現,它結合了C3P0、DBCP、PROXOOL等DB池的優點,同時加入了日誌監控,可以很好的監控DB池連線和SQL的執行情況,可以說是針對監控而生的DB連線池,是目前最好的連線池。

資料庫連線的配置方式

一、dbcp,目前已經不維護。 1、maven dependence <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</arti

Spring+Hibernate+Proxool資料庫連線配置

1,配置兩個proxool.xml檔案,proxool.first.xml配置 <proxool> <alias>Proxool.First</alias> <proxool> <ali

spring jdbc --注:c3p0資料庫連線druid連線使用配置整理

是Maven配置檔案:pom.xml的程式碼內容: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sch

[課本10.1.4]JDBC資料庫連線- C3P0資料來源--通過構造方法建立資料來源物件--通過配置檔案建立資料來源物件[推薦]

JDBC- C3P0資料來源 1 /*重點提醒*/ 2 連線資料庫的較低的jar包版本會與較高版本的mysql版本有衝突; 3 通過把mysql 8.0的版本降到5.5, jar包仍使用較高的 mysql-connector-java-5.1.7-bin.jar, 完美解決衝突.  

常用資料庫連線(dbpc,c3p0,Druid

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

資料庫連線效能比對(hikari druid c3p0 dbcp jdbc)

背景 對現有的資料庫連線池做調研對比,綜合性能,可靠性,穩定性,擴充套件性等因素選出推薦出最優的資料庫連線池 。      NOTE: 本文所有測試均是MySQL庫 測試結論    1:效能方面 hikariCP>druid>tomcat-jdbc&

spring+mybatis+c3p0資料庫連線druid連線使用配置整理

系統性能優化的時候,或者說在進行程式碼開發的時候,多數人應該都知道一個很基本的原則,那就是保證功能正常良好的情況下,要儘量減少對資料庫的操作。  據我所知,原因大概有這樣兩個:  一個是,一般情況下系統伺服器和資料庫伺服器應該是不在同一硬體上,這時候對資料庫的連線

java資料庫連線配置的幾方法

一,Tomcat配置資料來源: 方式一:在WebRoot下面建資料夾META-INF,裡面建一個檔案context.xml,內容如下:  <Context>       <Resource name="jdbc/test" auth="Container" type="javax.sq

hibernate配置資料庫連線的三方法

 三種連線都是以連線MySQl為例。 <!-- JDBC驅動程式 --> < property name="connection.driver_class">org.gjt.mm.mysql.Driver</property> &

JDBC資料庫連線連線資料庫資料庫操作DAO層設計通用更新及查詢方法(二)

上篇文章主要介紹了通過資料庫連線池連線資料庫,然後設計了對資料庫通用更新和查詢方法,本篇文章主要通過例項介紹上篇文章定義的對資料庫操作的幾個方法的使用:     首先我們先在資料庫建立一個學生資訊表Student欄位如圖: 建立好表將配置檔案的資訊改好然後需要建立一

JDBC資料庫連線連線資料庫資料庫操作DAO層設計通用更新及查詢方法(一)

該篇文章介紹了資料庫連線池獲取資料庫連線以及資料庫操作的基本使用,然後主要提供了java專案案例中dao層的一種設計,利用反射的原理定義了通用的查詢方法可以對應所有的表和例項。文章中的每段程式碼都提供了詳細的註釋及邏輯步驟 首先匯入資料庫連線的所需要的jar包:    

druid 資料庫連線的詳細配置

首先說一下自己程式中遇到的問題,前一段時間新寫了一個專案,主要架構改進,為前端提供介面(spring +springmvc+mybatis) 在新專案中使用的是阿里的druid連線池,配置簡單,除了資料庫地址,驅動類,使用者名稱和密碼其他一起都是預設,開始的時候由於專案更新上線頻率比較多,沒有出現太

ThreadLocal解決事務執行緒安全問題(c3p0資料庫連線工具類)

ThreadLocal底層是Map集合,它的key是當前執行緒,value由自己設定,可以繫結Connection或其他物件等,保證本次同一執行緒使用同一Connection。 ThreadLocal類提供幾個方法: get/set/remove 以下是ThreadLocal搭配c3p

dbcp,c3po等幾常見資料庫連線的使用比較

感覺在介紹之前有必要闡述一下連線池的幾個概念,有助於後邊一些文字的理解。最原始的資料庫使用就是開啟一個連線並進行使用,使用過後一定要關閉連線釋放資源。由於頻繁的開啟和關閉連線對jvm包括資料庫都有一定的資源負荷,尤其應用壓力較大時資源佔用比較多容易產生效能問題。由此使用連線池的作用就顯現出來,他的原

事務 與 資料庫連線c3p0】 與 DBUtiles學習筆記

1.事務 開啟事務:start transaction; 回滾事務:rollback; 提交事務: commit; 關閉自動提交事務:setAutoCommit(false); 1.1事務的特性ACID【面試】 1.原子性【A】:事務包含的邏輯不可分割 一致性【C】:事務執行前後,資料完

SpringBoot初始教程之資料庫連線(druid)

SpringBoot初始教程之資料庫連線池(druid) 1.介紹 Druid是一個JDBC元件庫,包括資料庫連線池、SQL Parser等元件。DruidDataSource是最好的資料庫連線池。SpringBoot支援任何一種資料庫連結池的配置,在這裡用druid作為例子進行講解 2

Spring配置資料庫連線Druid

連線池原理 連線池基本的思想是在系統初始化的時候,將資料庫連線作為物件儲存在記憶體中,當用戶需要訪問資料庫時,並非建立一個新的連線,而是從連線池中取出一個已建立的空閒連線物件。使用完畢後,使用者也並非將連線關閉,而是將連線放回連線池中,以供下一個請求訪問使用。而連線的建立、斷開都由連線池自身來管理。同時,還