【java學習總結】資料庫連線池與操作工具類
阿新 • • 發佈:2021-10-02
相比較原始的資料庫操作而言,使用連線池技術及資料庫操作工具類,往往可以更高效、更簡潔,本文主要介紹連線池工具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&useSSL=false&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 + "]"; } }