DBCP连接池的使用

通过连接池(数据源)优化我们的操作.
需求:
    使用jdbc的时候,没操作一次都需要获取连接(创建)用完之后把连接释放掉了(销毁),通过连接池来优化curd操作.
技术分析:
    连接池
连接池概述:
    管理数据库的连接,
    作用:
        提高项目的性能.
    就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可.
    所有的连接池必须实现一个接口 javax.sql.DataSource接口
 
    获取连接方法:
        Connection getConnection()
    归还连接的方法就是以前的释放资源的方法.调用connection.close();
自定义一个连接池(理解思想)
 
常用连接池:
    DBCP
    C3P0
 
增前方法
    1.继承
    2.装饰者模式(静态代理)
    3.动态代理
装饰者模式:★★★
    使用步骤:
        1.装饰者和被装饰者实现同一个接口或者继承同一个类
        2.装饰者中要有被装饰者的引用
        3.对需要增强的方法进行加强
        4.对不需要加强的方法调用原来方法
 
 常用的连接池:
    DBCP:(理解)
        apache组织
        使用步骤:
            1.导入jar包(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar)
            2.使用api
                a.硬编码
                    //创建连接池
                    BasicDataSource ds = new BasicDataSource();
 
                    //配置信息
                    ds.setDriverClassName("com.mysql.jdbc.Driver");
                    ds.setUrl("jdbc:mysql:///day07");
                    ds.setUsername("root");
                    ds.setPassword("1234");
 
 1 //DBCP代码演示:
 2 public class DbcpDemo {
 3      public static void main(String[] args) {
 4           //通过dbcp连接池获取链接
 5           BasicDataSource bDataSource = new BasicDataSource();
 6           //设置参数
 7           bDataSource.setDriverClassName("com.mysql.jdbc.Driver");
 8           bDataSource.setUsername("root");
 9           bDataSource.setPassword("root");
10           bDataSource.setUrl("jdbc:mysql://localhost:3306/test");
11           Connection conn=null;
12           try {
13               //获取链接池中的链接
14               conn = bDataSource.getConnection();
15               System.out.println(conn);
16           } catch (SQLException e) {
17               e.printStackTrace();
18           }finally {
19               if (conn!=null) {
20                    try {
21                         //虽然调用close方法,但是连接池通过装饰者模式,修改了close方法
22                         //实际的功能是释放链接回连接池中
23                         conn.close();
24                    } catch (SQLException e) {
25                         e.printStackTrace();
26                    }
27               }
28           }
29      }
30 }
31 //输出结果:
32 jdbc:mysql://localhost:3306/test, UserName=root@localhost, MySQL Connector Java
 
                b.配置文件
                    实现编写一个properties文件
                    //存放配置文件
                    Properties prop = new Properties();
                    prop.load(new FileInputStream("src/dbcp.properties"));
                    //设置
                    //prop.setProperty("driverClassName", "com.mysql.jdbc.Driver");
 
                    //创建连接池
                    DataSource ds = new BasicDataSourceFactory().createDataSource(prop);
 
1 //DBCP通过配置文件代码演示:
2 //配置文件:
3 driverClassName=com.mysql.jdbc.Driver
4 username=root
5 password=root
6 url=jdbc:mysql://localhost:3306/tes
 1 //演示代码:
 2 import java.io.FileInputStream;
 3 import java.io.FileNotFoundException;
 4 import java.io.IOException;
 5 import java.sql.Connection;
 6 import java.sql.SQLException;
 7 import java.util.Properties;
 8  
 9 import javax.sql.DataSource;
10  
11 import org.apache.commons.dbcp.BasicDataSourceFactory;
12 /**
13  * 通过配置文件使用连接池
14  * @author zxy
15  *
16  */
17 public class Demo {
18      public static void main(String[] args) {
19           //创建properties对象
20           Properties prop = new Properties();
21           Connection conn=null;
22           try {
23                //加载配置文件,传入输入流
24               prop.load(new FileInputStream("src/dbcp.properties"));
25                //获取链接
26               DataSource bs = BasicDataSourceFactory.createDataSource(prop);
27               conn = bs.getConnection();
28                //测试输出
29               System.out.println(conn);
30           } catch (FileNotFoundException e) {
31               e.printStackTrace();
32           } catch (IOException e) {
33               e.printStackTrace();
34           } catch (Exception e) {
35               e.printStackTrace();
36           }finally {
37                //关闭链接
38               if (conn!=null) {
39                    try {
40                         conn.close();
41                    } catch (SQLException e) {
42                         e.printStackTrace();
43                    }
44               }
45           }
46      }
47 }

 

 
posted @ 2017-09-01 21:39  赵安之  阅读(781)  评论(0编辑  收藏  举报