天天看點

資料庫連接配接池的使用ComboPooledDataSource API:

關于資料庫連接配接池的使用,首先我們要明白我們為什麼要用它,對應普通的資料庫連接配接操作,通常會涉及到以下一些操作是比較耗時的:

網絡通訊,涉及到網絡延時及協定通訊
身份驗證,涉及安全性檢查
連接配接合法性檢查,主要是檢查所連接配接的資料庫是否存在
并發控制機制
構造并初始化輸出緩沖區
連接配接成功後的資訊儲存,日志存儲
伺服器性能
資料庫配置優化
系統配置設定記憶體資源
等等~~~狀況,導緻資料庫連接配接操作比較耗時,~~~而且每次都得花費0.05s~1s的時間
但是使用連接配接池技術,本質上就是在一個請求對應的連接配接,都由一個線程池來維護着,也就是說“上下文切換”的代價是線程級别(所謂的納秒級),對于大規模的并發通路,就算以每秒幾億級别的通路量都是不成問題的。

      

一、在Java平台

之前一段時間曾經弄過資料庫連接配接池,使用的是c3p0這個工具包,

簡單記錄下c3p0的使用,當作學習的一個鞏固;

第一步導入jar包;

資料庫連接配接池的使用ComboPooledDataSource API:

第二步:

把jar包導入進來:

import com.mchange.v2.c3p0.ComboPooledDataSource;

import com.mchange.v2.c3p0.DataSources;

第三步:定義變量

package util;

import java.beans.PropertyVetoException;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import com.mchange.v2.c3p0.DataSources;

public class DbUtil {

    private static String url = "jdbc:mysql://localhost:3306/zdbang_net";

    private static String user = "root";

    private static String passwd = "admin";

    private static String driver = "com.mysql.jdbc.Driver";

    private ComboPooledDataSource cpds; 

    private static DbUtil db = new DbUtil();

    public static DbUtil getInstance() {

        return db;

    }

    private DbUtil() { 

        cpds = new ComboPooledDataSource();

        try {

            cpds.setDriverClass( driver);

            cpds.setJdbcUrl( url );

            cpds.setUser(user);                                  

            cpds.setPassword(passwd);  

            cpds.setMinPoolSize(5);                                     

            cpds.setAcquireIncrement(5);

            cpds.setMaxPoolSize(30);

            cpds.setMaxIdleTime(60);

        } catch (PropertyVetoException e) {

            e.printStackTrace();

        }   

    }

    public Connection getConn() {  

        try {

            return cpds.getConnection();

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return null;

    }

    protected void finalize() throws Throwable {

          DataSources.destroy(cpds);

          super.finalize();

    }

    public static void closeConn(Connection conn) {

        try {

            if (conn != null)

                conn.close();

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    public static Statement getStmt(Connection conn) {

        Statement stmt = null;

        try {

            stmt = conn.createStatement();

            return stmt;

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return null;

    }

    public static void closeStmt(Statement stmt) {

        try {

            if (stmt != null)

                stmt.close();

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    public static PreparedStatement getPs(Connection conn, String sql) {

        PreparedStatement ps = null;

        try {

            ps = conn.prepareStatement(sql);

            return ps;

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return null;

    }

    public static void closePs(PreparedStatement ps) {

        try {

            if (ps != null)

                ps.close();

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    public static ResultSet doQuery(Statement stmt, String sql) {

        try {

            ResultSet rs = stmt.executeQuery(sql);

            return rs;

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return null;

    }

    public static void closeRs(ResultSet rs) {

        try {

            if (rs != null)

                rs.close();

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }    

}

ComboPooledDataSource API:

http://stderr.org/doc/libc3p0-java-doc/api/com/mchange/v2/c3p0/ComboPooledDataSource.html