博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库连接池
阅读量:6241 次
发布时间:2019-06-22

本文共 3631 字,大约阅读时间需要 12 分钟。

数据库连接池

  1. 数据库的连接对象创建工作,比较消耗性能。

2.一开始现在内存中开辟一块空间(集合) , 一开先往池子里面放置 多个连接对象。 后面需要连接的话,直接从池子里面去。不要去自己创建连接了。 使用完毕, 要记得归还连接。确保连接对象能循环利用。

icon

自定义数据库连接池

  • 代码实现

  • 出现的问题:

    1. 需要额外记住 addBack方法

    2. 单例。

    3. 无法面向接口编程。

      UserDao dao = new UserDaoImpl();

      dao.insert();

      DataSource dataSource = new MyDataSource();

      因为接口里面没有定义addBack方法。

    4. 怎么解决? 以addBack 为切入点。

解决自定义数据库连接池出现的问题。

由于多了一个addBack 方法,所以使用这个连接池的地方,需要额外记住这个方法,并且还不能面向接口编程。

我们打算修改接口中的那个close方法。 原来的Connection对象的close方法,是真的关闭连接。

打算修改这个close方法,以后在调用close, 并不是真的关闭,而是归还连接对象。

如何扩展某一个方法?

原有的方法逻辑,不是我们想要的。 想修改自己的逻辑

  1. 直接改源码 无法实现。

  2. 继承, 必须得知道这个接口的具体实现是谁。

  3. 使用装饰者模式。

开源连接池

DBCP

  1. 导入jar文件

  2. 不使用配置文件:

    public void testDBCP01(){     Connection conn = null;     PreparedStatement ps = null;     try {         //1. 构建数据源对象         BasicDataSource dataSource = new BasicDataSource();         //连的是什么类型的数据库, 访问的是哪个数据库 , 用户名, 密码。。         //jdbc:mysql://localhost/bank 主协议:子协议 ://本地/数据库         dataSource.setDriverClassName("com.mysql.jdbc.Driver");         dataSource.setUrl("jdbc:mysql://localhost/bank");         dataSource.setUsername("root");         dataSource.setPassword("root");         //2. 得到连接对象         conn = dataSource.getConnection();         String sql = "insert into account values(null , ? , ?)";         ps = conn.prepareStatement(sql);         ps.setString(1, "admin");         ps.setInt(2, 1000);         ps.executeUpdate();     } catch (SQLException e) {         e.printStackTrace();     }finally {         JDBCUtil.release(conn, ps);     } }
  3. 使用配置文件方式:

    Connection conn = null; PreparedStatement ps = null; try {     BasicDataSourceFactory factory = new BasicDataSourceFactory();     Properties properties = new Properties();     InputStream is = new FileInputStream("src//dbcpconfig.properties");     properties.load(is);     DataSource dataSource = factory.createDataSource(properties);     //2. 得到连接对象     conn = dataSource.getConnection();     String sql = "insert into account values(null , ? , ?)";     ps = conn.prepareStatement(sql);     ps.setString(1, "liangchaowei");     ps.setInt(2, 100);     ps.executeUpdate(); } catch (Exception e) {     e.printStackTrace(); }finally {     JDBCUtil.release(conn, ps); }
  • C3P0

拷贝jar文件 到 lib目录

不使用配置文件方式

Connection conn = null;    PreparedStatement ps = null;    try {        //1. 创建datasource        ComboPooledDataSource dataSource = new ComboPooledDataSource();        //2. 设置连接数据的信息        dataSource.setDriverClass("com.mysql.jdbc.Driver");                //忘记了---> 去以前的代码 ---> jdbc的文档        dataSource.setJdbcUrl("jdbc:mysql://localhost/bank");        dataSource.setUser("root");        dataSource.setPassword("root");                //2. 得到连接对象        conn = dataSource.getConnection();        String sql = "insert into account values(null , ? , ?)";        ps = conn.prepareStatement(sql);        ps.setString(1, "admi234n");        ps.setInt(2, 103200);                ps.executeUpdate();            } catch (Exception e) {        e.printStackTrace();    }finally {        JDBCUtil.release(conn, ps);    }

使用配置文件方式

//默认会找 xml 中的 default-config 分支。         ComboPooledDataSource dataSource = new ComboPooledDataSource();        //2. 设置连接数据的信息        dataSource.setDriverClass("com.mysql.jdbc.Driver");                //忘记了---> 去以前的代码 ---> jdbc的文档        dataSource.setJdbcUrl("jdbc:mysql://localhost/bank");        dataSource.setUser("root");        dataSource.setPassword("root");                //2. 得到连接对象        conn = dataSource.getConnection();        String sql = "insert into account values(null , ? , ?)";        ps = conn.prepareStatement(sql);        ps.setString(1, "admi234n");        ps.setInt(2, 103200);

转载于:https://www.cnblogs.com/lq123/p/10088737.html

你可能感兴趣的文章
Launch和Shut Off操作详解 - 每天5分钟玩转 OpenStack(30)
查看>>
8显卡主机组装+问题记录+分析
查看>>
iOS开发 - CAReplicatorLayer的运用
查看>>
hadoop2.2.0编译安装
查看>>
asm 与 cglib(整理的)
查看>>
(一)搭建 solr4.6
查看>>
(三)solrj使用
查看>>
SUSE linux下intel 82579LM 网卡驱动安装
查看>>
聚生网管造成的网络故障
查看>>
移动用户大军的力量
查看>>
Oracle优化器和优化模式
查看>>
多并发系统架构的一些优化思路
查看>>
苹果系统从零开始--MAC OS X 教程2--dock
查看>>
当红炸子鸡区块链,如何实现企业级部署?
查看>>
sugon raid模式
查看>>
用wincvs查询代码变化的操作说明
查看>>
最初的汇率是怎么定下来的?
查看>>
hadoop常用命令
查看>>
亭子早期博客中16进制颜色值地址
查看>>
tab选项卡前后有向前和向后按钮,点击实现上一个下一个
查看>>