1. 程式人生 > 其它 >【java學習總結】資料庫連線池與操作工具類

【java學習總結】資料庫連線池與操作工具類

相比較原始的資料庫操作而言,使用連線池技術及資料庫操作工具類,往往可以更高效、更簡潔,本文主要介紹連線池工具c3po包以及資料庫操作工具類commons-dbutils。
相比較原始的資料庫操作而言,使用連線池技術及資料庫操作工具類,往往可以更高效、更簡潔,本文主要介紹連線池工具c3po包以及資料庫操作工具類commons-dbutils。

一、原始的資料庫操作方式

原始的資料庫操作方式如下,建立一個數據庫物件流程較為複雜,IP、埠、賬號、密碼需要在程式碼中定義,每次執行都需要建立連線,關閉連線。

        try {
            //獲取資料庫驅動 
            Class.forName("com.mysql.cj.jdbc.Driver");
            //獲取資料庫連線物件
            conn = DriverManager.getConnection(
                    
"jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC", "root", "123456"); //定義sql String sql = "select * from User_test"; //通過資料庫連線物件獲取資料庫執行物件 Statement statment = conn.createStatement(); //執行sql,將返回值存放在ResultSet中
ResultSet res_set = statment.executeQuery(sql); //遍歷ResultSet物件 while(res_set.next()){ String id_str = res_set.getString("id"); String username = res_set.getString("username"); String password = res_set.getString("password"); String newline
= id_str+","+username+","+password+"\n"; System.out.println(newline); FileUtils.write(file, newline, "utf8", true); } } catch (Exception e) { e.printStackTrace(); } finally { // 關閉資料庫連線 conn.close(); }

二、資料庫連線池(c3po)

資料庫連線池就是一個容器,存放資料庫連線的容器,當系統初始化好後,容器被建立,容器中會申請一些連線物件,當用戶來訪問資料庫時,從容器中獲取連線物件,使用者訪問完之後,會將連線物件歸還給容器。

相比較原始的連線方式,資料庫連線池技術具有節約資源、使用者訪問高效的優勢。常見的連線池技術有c3po、Druid,本文描述的是c3po的實現過程。

以maven專案為例

1. 在pom檔案中新增對應依賴

<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
</dependency>

2、定義配置檔案

名稱及路徑 : src/main/resources/c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 預設配置,只可以出現一次 -->
<!--根據name獲取對應配置的配置<named-config name="mysql"> -->
    <default-config>
        <!-- 配置JDBC 四個基本屬性 -->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC</property>
        <property name="user">root</property>
        <property name="password">123456</property>
        <!--當連線池中的連線耗盡的時候c3p0一次同時獲取的連線數。Default: 3 -->
        <property name="acquireIncrement">3</property>
        <!-- 初始化資料庫連線池時連線的數量 -->
        <property name="initialPoolSize">5</property>
        <!-- 資料庫連線池中的最小的資料庫連線數 -->
        <property name="minPoolSize">2</property>
        <!-- 資料庫連線池中的最大的資料庫連線數 -->
        <property name="maxPoolSize">10</property>
    </default-config>
</c3p0-config>

3、建立資料庫連線池物件ComboPooledDataSource以及獲取資料庫連線getConnection

// 獲得c3p0連線池物件
private static ComboPooledDataSource ds = new ComboPooledDataSource("mysql");

// 獲得資料庫連線物件
public static Connection getConnection() throws SQLException {
    return ds.getConnection();
}

// 獲得c3p0連線池物件
public static DataSource getDataSource() {
    return ds;
}

資料庫連線池工具只管理資料庫連線物件,不會影響後續的操作,後續操作的簡化可以藉助資料庫操作工具類來實現,比如commons-dbutils。

三、資料庫操作工具類(commons-dbutils)

commons-dbutils是一個開源JDBC工具類庫,它是對JDBC的簡單封裝,學習成本極低,並且使用dbutils能極大簡化JDBC編碼的工作量,同時也不會影響程式的效能。

新增pom檔案依賴

<dependency>
    <groupId>commons-dbutils</groupId>
    <artifactId>commons-dbutils</artifactId>
    <version>1.7</version>
</dependency>

基本操作

// commons-dbutils核心api,構造時候需要傳入資料庫連線物件(可以為上文中連線池中獲取的連線物件)
QueryRunner runner = new QueryRunner(JDBCUtils.getDataSource());

// 定義sql
String sql = "select * from user_test";

// 執行sql,返回DbUser類構成的列表物件(注意這裡需要定義與資料庫一模一樣的資料庫model類,才可以將查詢結果一一對應)
List list = (List)runner.query(sql, new BeanListHandler(DbUser.class));
DbUser物件
package com.lxs.db2excel;

public class DbUser2 {
    
    private String uid;
    
    private String username;
    
    private String password;
    
    public String getUid() {
        return uid;
    }
    public void setUid(String uid) {
        this.uid = uid;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "DbUser [uid=" + uid + ", username=" + username + ", password=" + password + "]";
    } 
}