成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

C3P0&Druid——兩種數(shù)據(jù)庫連接池的使用方法

mgckid / 1767人閱讀

數(shù)據(jù)庫連接池——C3P0&Druid (一) 數(shù)據(jù)庫連接池
每一個事物都有其存在的意義,在初學(xué)jdbc的時候,我們建立數(shù)據(jù)庫連接對象后,會對其進行釋放,但是數(shù)據(jù)庫連接的建立和關(guān)閉是非常消耗資源的,而且頻繁的操作會使得性能變得低下,數(shù)據(jù)庫連接池可以幫我們解決這樣的問題
(1) 概念
數(shù)據(jù)庫連接池負責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個現(xiàn)有的數(shù)據(jù)庫連接,而不是再重新建立一個;釋放空閑時間超過最大空閑時間的數(shù)據(jù)庫連接來避免因為沒有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接遺漏。這項技術(shù)能明顯提高對數(shù)據(jù)庫操作的性能。

簡單理解:就是一個存放數(shù)據(jù)庫連接的容器,當(dāng)用戶需要訪問數(shù)據(jù)庫的時候,容器提供連接對象給用戶用,之后用戶將連接對象歸還給容器

(2) 使用

A:實現(xiàn) javax.sql 包下的 DataSource 接口

方法:獲取連接:getConnection()

方法:歸還連接:Connection.close()

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

B:我們可以使用一些開源的數(shù)據(jù)庫廠商提供的實現(xiàn)

C3P0

Druid (來自阿里巴巴)

(3) C3P0

A:首先導(dǎo)入三個jar包 c3p0-0.9.5.2.jar 、mchange-commons-java-0.2.12.jar、數(shù)據(jù)庫驅(qū)動jar包

B:修改配置文件

C創(chuàng)建數(shù)據(jù)庫連接池對象——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配置
        //數(shù)據(jù)庫連接池對象 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());
    }
}

//測試輸出日志及內(nèi)容
(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");
            //執(zhí)行sql
            int count = preparedStatement.executeUpdate();
            System.out.println(count);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(preparedStatement,connection);
        }
    }
}
結(jié)尾:

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

如果能幫到你的話,那就來關(guān)注我吧?。ㄏ盗形恼戮鶗诠娞柕谝粫r間更新)

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

一個堅持推送原創(chuàng)Java技術(shù)的公眾號:理想二旬不止

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75951.html

相關(guān)文章

  • Druid數(shù)據(jù)庫連接池就這么簡單

    摘要:看過的一些書上也是多數(shù)介紹了這兩種數(shù)據(jù)庫連接池,自己做的也是使用。參考資料文檔首頁文檔問題阿里學(xué)習(xí),號稱最好的數(shù)據(jù)庫連接池常用數(shù)據(jù)庫連接池配置說明學(xué)習(xí)整合,使用連接池使用和監(jiān)控配置數(shù)據(jù)源配置如果文章有錯的地方歡迎指正,大家互相交流。 前言 本章節(jié)主要講解Druid數(shù)據(jù)庫連接池,為什么要學(xué)Druid數(shù)據(jù)庫連接池呢?? 我的知識儲備數(shù)據(jù)庫連接池有兩種->C3P0,DBCP,可是現(xiàn)在看起來并...

    waltr 評論0 收藏0
  • JAVA數(shù)據(jù)庫連接池總結(jié)

    摘要:目前主流的數(shù)據(jù)庫連接池有等幾種。默認值初始化連接池中的連接數(shù),取值應(yīng)在與之間,默認為最大空閑時間秒內(nèi)未使用則連接被丟棄。當(dāng)連接池中的連接耗盡的時候一次同時獲取的連接數(shù)。每秒檢查所有連接池中的空閑連接。 一、數(shù)據(jù)庫連接池 數(shù)據(jù)庫連接池的基本思想就是為數(shù)據(jù)庫連接建立一個緩沖池,預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫連接時,只需要從緩沖池中取出一個,使用完之后在放回去,節(jié)省連接建...

    xioqua 評論0 收藏0
  • 數(shù)據(jù)庫連接

    摘要:數(shù)據(jù)庫連接池的基本原理是在內(nèi)部對象池中維護一定數(shù)量的數(shù)據(jù)庫連接,并對外暴露數(shù)據(jù)庫連接獲取和返回方法。統(tǒng)一的連接管理,避免數(shù)據(jù)庫連接泄漏在較為完備的數(shù)據(jù)庫連接池實現(xiàn)中,可根據(jù)預(yù)先的連接占用超時設(shè)定,強制收回被占用連接。 一、數(shù)據(jù)庫連接池的原理 基本原理 對于一個簡單的數(shù)據(jù)庫應(yīng)用,由于對于數(shù)據(jù)庫的訪問不是很頻繁。這時可以簡單地在需要訪問數(shù)據(jù)庫時,就新創(chuàng)建一個連接,用完后就關(guān)閉它,這樣做也...

    olle 評論0 收藏0
  • 數(shù)據(jù)庫連接

    摘要:數(shù)據(jù)庫連接池的基本原理是在內(nèi)部對象池中維護一定數(shù)量的數(shù)據(jù)庫連接,并對外暴露數(shù)據(jù)庫連接獲取和返回方法。統(tǒng)一的連接管理,避免數(shù)據(jù)庫連接泄漏在較為完備的數(shù)據(jù)庫連接池實現(xiàn)中,可根據(jù)預(yù)先的連接占用超時設(shè)定,強制收回被占用連接。 一、數(shù)據(jù)庫連接池的原理 基本原理 對于一個簡單的數(shù)據(jù)庫應(yīng)用,由于對于數(shù)據(jù)庫的訪問不是很頻繁。這時可以簡單地在需要訪問數(shù)據(jù)庫時,就新創(chuàng)建一個連接,用完后就關(guān)閉它,這樣做也...

    Tamic 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<