JavaEE學習之jdbc數據庫連接池


數據庫連接池

  概述:管理數據庫連接

  作用:提高項目的性能

  原理:在系統初始化的時候,將數據庫連接作為對象存儲在內存中,當用戶需要訪問數據庫時,從連接池中取出一個已建立的空閑連接對象。使用完畢后,將連接放回連接池中,以供下一個請求訪問使用

☆必須導入(mysql-connector-java-5.1.40-bin.jarmchange-commons-java-0.2.11.jar);

☆所有的連接池必須實現一個接口:java.sql.DataSource

☆獲取連接的方法:Connection getConnection();

☆歸還連接的方法:XXX.close();

常用的數據庫連接池有:DBCP和C3P0

DBCP使用步驟:

1.導入jar包(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar

2.使用api

  a.硬編碼

 1   //創建連接池
 2   BasicDataSource  source=new BasicDataSource();
 3   
 4   //配置信息
 5   source.setDriverClassName("com.mysal.jdbc.Driver");
 6   source.setUrl("jdbc:mysql://localhost:3306/需要連接的數據庫名稱");
 7   source.setUsername("數據庫登錄名稱");
 8   source.setPassword("數據庫登錄密碼");
 9   
10  //獲取連接
11  Connection connection=source.getConnection();
12  
13  //設置SQL語句
14  String sql=" ";
15  
16  //編寫預處理語句
17  prepareStatement prepare=connection.prepareStatement(sql);

 

   b.配置文件

 先編寫一個properties文件或Xml文件

 1  //聲明配置
 2   Properties properties=new Properties();
 3   properties.load(new FileInputStream("配置文件的位置"));
 4  
 5 //創建連接池
 6   DataSource source=new BasicDataSourceFactory();
 7   
 8  //獲取連接
 9   Connection connection=source.getConnection();
10  
11 //設置SQL語句
12  String sql=" ";
13  
14 //編寫預處理語句
15  prepareStatement prepare=connection.prepareStatement(sql);

 

 c3p0使用步驟:

1.導入jar包(c3p0-0.9.1.2.jar)

   a.使用硬編碼

 1 //創建連接池
 2 ComboPooledDataSource source=new ComboPooledDataSource();
 3 
 4 //設置參數
 5 source.setDriverClass(com.mysql.jdbc.Driver);
 6 source.setJdbcUrl("jdbc:mysql://localhost:3306/需要連接的數據庫名稱");
 7 source.setUser("數據庫登錄賬號");
 8 source.setPassword("數據庫登錄密碼");
 9 
10 //獲取連接
11 Connection connection=source.getConnection();
12 
13 //設置SQL語句
14 String sql= " ";
15 
16 //編寫預處理語句
17 PreparedStatement st=connection.prepareStatement(sql);

  b.配置文件

配置文件的名稱(必須):c3p0.properties 或者 c3p0-config.xml
配置文件的路徑(必須):src

 1 //創建連接池
 2 ComboPooledDataSource source=new CombopooledDataSource();
 3 
 4 //獲取連接
 5  Connection connection=source.getConnection();
 6 
 7 //設置SQL語句
 8 String sql= " ";
 9 
10 //編寫預處理語句
11 PreparedStatement st=connection.prepareStatement(sql);

使用dbutils

  dbutils是apache組織的一個工具類,更放方便我們使用

使用步驟

  1.導入jar包(commons-dbutils-1.4.jar);

  2.創建QueryRunner類

  3.編寫sql

  4.執行sql  query(....)執行r操作  updata(....)執行c u d操作

核心類和接口:

QueryRunner:類名
  作用:操作sql語句
  構造器:
    new QueryRunner(Datasource ds);
注意:
底層幫我們創建連接,創建語句執行者 ,釋放資源.
常用方法:
  query(..):
  update(..):

DbUtils:釋放資源,控制事務 類
  closeQuietly(conn):內部處理了異常
  commitAndClose(Connection conn):提交事務並釋放連接

ResultSetHandler:封裝結果集 接口
  ArrayHandler, 將查詢結果的第一條記錄封裝成數組,返回
  ArrayListHandler, 將查詢結果的每一條記錄封裝成數組,將每一個數組放入list中返回
  BeanHandler, 將查詢結果的第一條記錄封裝成指定的bean對象,返回
  BeanListHandler, 將查詢結果的每一條記錄封裝成指定的bean對象,將每一個bean對象放入list中 返回.
  ColumnListHandler, 將查詢結果的指定一列放入list中返回
  MapHandler, 將查詢結果的第一條記錄封裝成map,字段名作為key,值為value 返回
  MapListHandler, 將查詢結果的每一條記錄封裝map集合,將每一個map集合放入list中返回
  ScalarHandler,針對於聚合函數 例如:count(*) 返回的是一個Long值

dbutils案例: 

 1 import java.sql.SQLException;
 2 import java.util.List;
 3 import java.util.Map;
 4 
 5 import org.apache.commons.dbutils.QueryRunner;
 6 import org.apache.commons.dbutils.handlers.BeanHandler;
 7 import org.apache.commons.dbutils.handlers.BeanListHandler;
 8 import org.apache.commons.dbutils.handlers.MapHandler;
 9 import org.apache.commons.dbutils.handlers.MapListHandler;
10 import org.junit.Test;
11 
12 import com.jdbc.utlis.Category;
13 import com.jdbc.utlis.DataSourceUtils;
14 
15 public class dbUtils {
16     @Test
17     public void insert(){
18         //創建queryRunner類
19         QueryRunner queryRunner = new QueryRunner(DataSourceUtils.getDataSource());
20         //編寫sql
21         String sql="INSERT INTO user VALUES(9,'東尼大木和周傑倫')";
22         try {
23         //執行sql;
24             int update = queryRunner.update(sql);
25             System.out.println(update);
26         } catch (SQLException e) {
27             // TODO Auto-generated catch block
28             e.printStackTrace();
29         }
30     }
31     @Test
32     public void select(){
33         //創建queryRunner類
34         QueryRunner queryRunner = new QueryRunner(DataSourceUtils.getDataSource());
35         //編寫sql
36         String sql="select * from user ";
37         //執行sql;
38         try {
39             List<Map<String, Object>> query = queryRunner.query(sql, new MapListHandler());
40             for (Object object : query) {
41                 System.out.println(object);
42             }
43             
44         } catch (SQLException e) {
45             // TODO Auto-generated catch block
46             e.printStackTrace();
47         }
48     }
49 }
dbUtilsDemo

 

dbutils在使用時用到的工具類:

☆工具類在使用時需要導入c3p0的jar包並配置c3p0的配置文件用於連接數據庫

 1 package com.jdbc.utlis;
 2 
 3 import java.sql.Connection;
 4 import java.sql.ResultSet;
 5 import java.sql.SQLException;
 6 import java.sql.Statement;
 7 
 8 import javax.sql.DataSource;
 9 
10 import com.mchange.v2.c3p0.ComboPooledDataSource;
11 
12 public class DataSourceUtils {
13     private static ComboPooledDataSource dataSource=new ComboPooledDataSource(); 
14     /**
15      * 獲取數據源
16      * @return ComboPooledDataSource 連接池
17      */
18     public static DataSource getDataSource(){
19         return dataSource;
20         
21     }
22     /**
23      * 
24      * 獲取連接
25      * @return 連接
26      * @throws SQLException
27      */
28     public static Connection getConnection() throws SQLException{
29              return dataSource.getConnection();
30     }
31     /**
32      * 釋放資源
33      * @param Connection,Statement,ResultSet
34      */
35     public static void closeResource(Connection connection,Statement statement,ResultSet resultSet){
36         closeResultSet(resultSet);
37         closeStatent(statement);
38         closeConnection(connection);
39     }
40     /**
41      * 釋放資源
42      * @param Connection
43      */
44     public static void closeConnection(Connection connection){
45         if(connection!=null){
46             try {
47                 connection.close();
48             } catch (SQLException e) {
49                 // TODO Auto-generated catch block
50                 e.printStackTrace();
51             }
52         }
53         connection=null;
54     }
55     /**
56      * 釋放資源
57      * @param Statement
58      */
59     public static void closeStatent(Statement statement){
60         if(statement!=null){
61             try {
62                 statement.close();
63             } catch (SQLException e) {
64                 // TODO Auto-generated catch block
65                 e.printStackTrace();
66             }
67         }
68         statement=null;
69     }
70     /**
71      * 釋放資源
72      * @param ResultSet
73      */
74     public static void closeResultSet(ResultSet resultSet){
75         if(resultSet!=null){
76             try {
77                 resultSet.close();
78             } catch (SQLException e) {
79                 // TODO Auto-generated catch block
80                 e.printStackTrace();
81             }
82         }
83         resultSet=null;
84     }
85 }
DataSourceUtils

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM