JavaEE学习之jdbc数据库连接池

时间:2022-06-11 11:49:31

数据库连接池

  概述:管理数据库连接

  作用:提高项目的性能

  原理:在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,从连接池中取出一个已建立的空闲连接对象。使用完毕后,将连接放回连接池中,以供下一个请求访问使用

☆必须导入(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案例: 

JavaEE学习之jdbc数据库连接池JavaEE学习之jdbc数据库连接池
 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的配置文件用于连接数据库

JavaEE学习之jdbc数据库连接池JavaEE学习之jdbc数据库连接池
 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