eclipse下C3P0連接池的配置

簡介:

數(shù)據(jù)庫連接池的基本思想就是為數(shù)據(jù)庫連接建立一個“緩沖池”。預先在緩沖池中放入一定數(shù)量的連接藏雏,當需要建立數(shù)據(jù)庫連接時拷况,只需從“緩沖池”中取出一個,使用完畢之后再放回去掘殴。數(shù)據(jù)庫連接池負責分配赚瘦、管理和釋放數(shù)據(jù)庫連接,它允許應用程序重復使用一個現(xiàn)有的數(shù)據(jù)庫連接奏寨,而不是重新建立一個起意。它的優(yōu)勢有: 
(1)資源重用
(2)更快的系統(tǒng)反應速度
(3)新的資源分配手段對于多應用共享同一數(shù)據(jù)庫的系統(tǒng)而言,可在應用層通過數(shù)據(jù)庫連接池的配置實現(xiàn)某一應用最大可用數(shù)據(jù)庫連接數(shù)的限制避免某一應用獨占所有的數(shù)據(jù)庫資源.
(4)統(tǒng)一的連接管理病瞳,避免數(shù)據(jù)庫連接泄露在較為完善的數(shù)據(jù)庫連接池實現(xiàn)中揽咕,可根據(jù)預先的占用超時設定,強制回收被占用連接仍源,從而避免了常規(guī)數(shù)據(jù)庫連接操作中可能出現(xiàn)的資源泄露

主流的java連接池

C3P0連接池
DBCP
Proxool
...

1.記錄 用C3P0連接池鏈接

下載C3P0連接池jar包 提取碼:【27583EBAA9133A75D489356B99734362】經(jīng)過MD5加密 ( ̄▽ ̄)皮一下 很開心

導入jar包到你需要的項目里面

導入過程心褐,英文版是【Build Path】-->【Configure Build Path...】

ps

這個也需要的哦 你一定知道吧

src文件夾粘貼下載下來的c3p0-config.xml文件(當然也可以自己新建揩抡,但是名字一定一致)


然后配置這個文件

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <property name="user">root</property>
        <property name="password">123456</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/java_web?useSSL=true</property>
        <!--以上的user是數(shù)據(jù)庫的用戶蚯撩,password是數(shù)據(jù)庫的密碼,driverClass是mysql的數(shù)據(jù)庫驅(qū)動蛔垢,jdbcUrl是連接數(shù)據(jù)庫的url -->
        <!--當連接池中的連接耗盡的時候c3p0一次同時獲取的連接數(shù) -->
        <property name="acquireIncrement">5</property>
        <!--初始化時獲取十個連接,取值應在minPoolSize與maxPoolSize之間 -->
        <property name="initialPoolSize">10</property>
        <!--連接池中保留的最小連接數(shù) -->
        <property name="minPoolSize">10</property>
        <!--連接池中保留的最大連接數(shù) -->
        <property name="maxPoolSize">50</property>
        <!--JDBC的標準參數(shù)掘而,用以控制數(shù)據(jù)源內(nèi)加載的PreparedStatements數(shù)量挟冠。但由于預緩存的statements屬于單個connection而不是整個連接池。所以設置這個參數(shù)需要考慮到多方面的因素袍睡。如果maxStatements與maxStatementsPerConnection均為0知染,則緩存被關閉。Default: 0-->
        <property name="maxStatements">20</property>
        <!--maxStatementsPerConnection定義了連接池內(nèi)單個連接所擁有的最大緩存statements數(shù)斑胜。Default: 0 -->
        <property name="maxStatementsPerConnection">5</property>
    </default-config>
    <named-config name="mysql">//這個名字注意了
        <property name="user">root</property>//不是用戶名
        <property name="password">123456</property>//不是密碼
        <property name="driverClass">com.mysql.jdbc.Driver</property>//認不到系列驅(qū)動
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/java_web??useUnicode=true&amp;useSSL=false</property>//java_web 請不要替換成你的數(shù)據(jù)庫名字
        <property name="acquireIncrement">5</property>
        <property name="initialPoolSize">10</property>
        <property name="minPoolSize">10</property>
        <property name="maxPoolSize">50</property>
        <property name="maxStatements">20</property>
        <property name="maxStatementsPerConnection">5</property>
    </named-config>
</c3p0-config>

配置信息主要是填寫數(shù)據(jù)庫驅(qū)動控淡、數(shù)據(jù)庫名稱、數(shù)據(jù)庫用戶名止潘、密碼等等
建立一個TestC3p0測試類
假設我們mysql java_web數(shù)據(jù)庫有一個表user_table如下


package demo;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestC3p0 {
     public void testSelect() {
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            //1.創(chuàng)建自定義連接池對象
            //此種方法加載的配置文件中默認配置default-config
//          ComboPooledDataSource dataSource = new ComboPooledDataSource();
            //加載有名稱的配置named-config
            ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql");
            try {
                //2.從池中獲取對象(改造過后)
                conn = dataSource.getConnection();
                //3.編寫SQL語句
                String sql="select username from user_table where password = ?";
                //4.獲取執(zhí)行sql語句的對象
                pstmt = conn.prepareStatement(sql);
                //5.設置參數(shù)
                pstmt.setString(1,"123");
                //6.執(zhí)行
                rs = pstmt.executeQuery();
                //7.處理結(jié)果集
                while (rs.next()){
                    System.out.println(rs.getString("username"));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                if(rs!=null){
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if(pstmt!=null){
                    try {
                        pstmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if(conn!=null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        
     }
     public static void main(String[] args){
         TestC3p0 testC3p0 = new TestC3p0();
         testC3p0.testSelect();
     } 
}

運行結(jié)果

紅色為日志信息

然后我們就可以編寫一個工具類掺炭,方便使用

package demo;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class C3P0Utils {
     private static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql");

        /**
         * 獲取連接池對象
         */
        public static DataSource getDataSource(){
            return dataSource;
        }

        /**
         * 從池中獲取連接對象
         */
        public static Connection getConnection(){
            try {
                return dataSource.getConnection();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }

        /**
         * 釋放資源
         */
        public static void releaseConnection(Connection connection,PreparedStatement pstmt,ResultSet rs){
                  if(rs!=null){
                      try {
                          rs.close();
                      } catch (SQLException e) {
                          e.printStackTrace();
                      }
                  }
                  if(pstmt!=null){
                      try {
                          pstmt.close();
                      } catch (SQLException e) {
                          e.printStackTrace();
                      }
                  }
                  if(connection!=null) {
                      try {
                          connection.close();
                      } catch (SQLException e) {
                          e.printStackTrace();
                      }
                  }
        }
}

測試工具類的使用


package demo;

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

public class test {

    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            conn = C3P0Utils.getConnection();
            String sql="select username from user_table where password = ?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1,"123");
            rs = pstmt.executeQuery();
            while (rs.next()){
                System.out.println(rs.getString("username"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally{
            C3P0Utils.releaseConnection(conn,pstmt,rs);
        }
    }
}

遇到的問題

1.

如果你看見這個警告首先恭喜你,你完成了

原因:

不建議在沒有服務器身份驗證的情況下建立SSL連接,根據(jù)MySQL 5.5.45+、5.6.26+和5.7.6+的要求凭戴,如果沒有設置顯式選項涧狮,則必須默認建立SSL連接。為了符合不使用SSL的現(xiàn)有應用程序么夫,verifyServerCertificate屬性被設置為“false”者冤。您需要通過設置useSSL=false顯式禁用SSL,或者設置useSSL=true并為服務器證書驗證提供信任存儲档痪。

解決


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涉枫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腐螟,更是在濱河造成了極大的恐慌拜银,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遭垛,死亡現(xiàn)場離奇詭異,居然都是意外死亡操灿,警方通過查閱死者的電腦和手機锯仪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趾盐,“玉大人庶喜,你說我怎么就攤上這事【壤穑” “怎么了久窟?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長本缠。 經(jīng)常有香客問我斥扛,道長,這世上最難降的妖魔是什么丹锹? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任稀颁,我火速辦了婚禮芬失,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匾灶。我一直安慰自己棱烂,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布阶女。 她就那樣靜靜地躺著颊糜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秃踩。 梳的紋絲不亂的頭發(fā)上衬鱼,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音吞瞪,去河邊找鬼馁启。 笑死,一個胖子當著我的面吹牛芍秆,可吹牛的內(nèi)容都是我干的惯疙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼妖啥,長吁一口氣:“原來是場噩夢啊……” “哼霉颠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荆虱,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蒿偎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后怀读,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诉位,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年菜枷,在試婚紗的時候發(fā)現(xiàn)自己被綠了苍糠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡啤誊,死狀恐怖岳瞭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚊锹,我是刑警寧澤瞳筏,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站牡昆,受9級特大地震影響姚炕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一钻心、第九天 我趴在偏房一處隱蔽的房頂上張望凄硼。 院中可真熱鬧,春花似錦捷沸、人聲如沸摊沉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽说墨。三九已至,卻和暖如春苍柏,著一層夾襖步出監(jiān)牢的瞬間尼斧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工试吁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棺棵,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓熄捍,卻偏偏與公主長得像烛恤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子余耽,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 原文鏈接:https://docs.spring.io/spring-boot/docs/1.4.x/refere...
    pseudo_niaonao閱讀 4,702評論 0 9
  • JDBC基礎知識 一缚柏、采用JDBC訪問數(shù)據(jù)庫的基本步驟: A.載入JDBC驅(qū)動程序 B.定義連接URL ...
    java日記閱讀 3,854評論 0 20
  • 要加“m”說明是MB,否則就是KB了. -Xms:初始值 -Xmx:最大值 -Xmn:最小值 java -Xms8...
    dadong0505閱讀 4,837評論 0 53
  • Java 為數(shù)據(jù)庫連接池提供了公共的接口:javax.sql.DataSource碟贾,各個廠商需要讓自 己的連接池實...
    勝浩_ae28閱讀 1,338評論 0 2
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,104評論 1 32