數據庫鏈接池 —— Druid的簡單使用

Druid不只是一個數據庫鏈接池,還包含一個ProxyDriver、一系列內置的JDBC組件庫、一個SQL Parser。支持全部JDBC兼容的數據庫,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等。html

 

使用步驟

必定要導入jar架包。要配置好文件,若是不配置文件,記得在程序中自行添加。java

 

  1. 導入jar包: druid-1.0.9.jar、mysql-connector-java-5.1.48.jar

  2. 定義配置文件:能夠命名爲druid-1.0.9.properties
    driverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql://MySQL地址/數據庫名
    username=用戶名
    password=密碼
    initialSize=初始化鏈接數
    maxActive=最大鏈接數
    maxWait=最大等待時間(毫秒爲單位)

     

  3. 加載配置文件druid-1.0.9.properties

  4. 獲取鏈接池對象

  5. 獲取數據庫鏈接

舉例以下:mysql

package my.view.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 properties = new Properties();

        // 獲取類的類加載器
        ClassLoader classLoader = DruidDemo.class.getClassLoader();

        // 獲取druid-1.0.9.properties配置文件資源輸入流
        InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties");

        // 加載配置文件
        properties.load(resourceAsStream);

        // 獲取鏈接池對象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);

        // 獲取數據庫鏈接對象
        Connection connection = dataSource.getConnection();

        // 打印獲取到的數據庫鏈接對象地址值
        System.out.println(connection);
    }

}

 

定義一個建立數據庫鏈接池對象的類

在使用數據庫鏈接池的時候,咱們不可能說每次都如上例中的狀況本身寫一遍吧。咱們能夠自定義一個工具類,用來建立數據庫鏈接池對象,這個時候,咱們乳溝想要建立數據庫鏈接池對象,直接調用該工具類便可。sql

 

建立工具類實例

定義獲取數據庫鏈接池對象的方法數據庫

/**
 * 數據庫鏈接對象
 */
private static DataSource dataSource;

/*
 獲取數據庫鏈接池對象
 */
static {

    try {
        // 獲取加載配置文件的對象
        Properties properties = new Properties();
        // 獲取類的類加載器
        ClassLoader classLoader = JdbcUtils.class.getClassLoader();
        // 獲取druid-1.0.9.properties配置文件資源輸入流
        InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties");
        // 加載配置文件
        properties.load(resourceAsStream);
        // 獲取鏈接池對象
        dataSource = DruidDataSourceFactory.createDataSource(properties);
    } catch (Exception e) {
        e.printStackTrace();
    }

}

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

 

定義獲取數據庫鏈接對象的方法工具

/**
 * 獲取數據庫鏈接對象
 */
public static Connection getConnection() throws Exception {
    return dataSource.getConnection();
}

 

定義釋放資源的方法測試

/**
 * 歸還鏈接
 * @param t 要被歸還到熟便可鏈接池對象的數據庫鏈接對象
 * @param <T> 數據庫鏈接對象的類型
 */
public static <T> void releaseResources (T t){
    if(t != null){
        try {
            // 利用反射,獲取class對象
            Class<?> aClass = t.getClass();
            // 獲取class對象中的方法對象
            Method close = aClass.getMethod("close");
            // 執行方法
            close.invoke(t);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

該工具類總的代碼:ui

package my.view.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

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

public class JdbcUtils {

    /**
     * 數據庫鏈接對象
     */
    private static DataSource dataSource;

    /*
     獲取數據庫鏈接池對象
     */
    static {

        try {
            // 獲取加載配置文件的對象
            Properties properties = new Properties();
            // 獲取類的類加載器
            ClassLoader classLoader = JdbcUtils.class.getClassLoader();
            // 獲取druid-1.0.9.properties配置文件資源輸入流
            InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties");
            // 加載配置文件
            properties.load(resourceAsStream);
            // 獲取鏈接池對象
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

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

    /**
     * 獲取數據庫鏈接對象
     */
    public static Connection getConnection() throws Exception {
        return dataSource.getConnection();
    }

    /**
     * 歸還鏈接
     * @param t 要被歸還到熟便可鏈接池對象的數據庫鏈接對象
     * @param <T> 數據庫鏈接對象的類型
     */
    public static <T> void releaseResources (T t){
        if(t != null){
            try {
                // 利用反射,獲取class對象
                Class<?> aClass = t.getClass();
                // 獲取class對象中的方法對象
                Method close = aClass.getMethod("close");
                // 執行方法
                close.invoke(t);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}

 

使用上面建立個工具類實例

有以下一個數據表格url

CREATE TABLE account (
    id INT PRIMARY KEY AUTO_INCREMENT,   -- id
    NAME VARCHAR(10),                    -- 名字
    balance DOUBLE                       -- 餘額
);

INSERT INTO account (NAME, balance) VALUES ('LeeHua', 1000), ('Tom', 1000);

向該表格中插入一條數據,實現以下:spa

package my.view.datasource.druid;

import my.view.utils.JdbcUtils;

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

public class JdbcUtilsDemo {

    public static void main(String[] args) throws Exception{

        // 獲取數據庫鏈接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 從數據庫鏈接池對象中獲取數據庫鏈接對象
        Connection connection = dataSource.getConnection();

        // 預約義定義SQL語句
        String sql = "INSERT INTO account (NAME, balance) VALUES (?, ?);";

        // 獲取執行預約義SQL語句對象
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        // 給?賦值
        preparedStatement.setString(1, "WanWu");
        preparedStatement.setInt(2, 2000);

        // 執行預編譯好的SQL語句
        preparedStatement.executeUpdate();

        // 釋放資源:PreparedStatement
        JdbcUtils.releaseResources(preparedStatement);

        // 歸還鏈接
        JdbcUtils.releaseResources(connection);

        // 釋放資源:數據庫鏈接池
        JdbcUtils.releaseResources(dataSource);
    }

}

 

運行程序,而後查詢一下表記錄:

能夠看到插入了一條數據,說明測試成功。

 

          

相關文章
相關標籤/搜索