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

本文共 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

你可能感兴趣的文章
如何检测域名是否被微信屏蔽 微信域名检测接口API是如何实现
查看>>
POJ1611-The Suspects
查看>>
Linux下安装Python-3.3.2【转】
查看>>
LeetCode OJ:Merge Two Sorted Lists(合并两个链表)
查看>>
功能测试
查看>>
【BZOJ 1901】Dynamic Rankings
查看>>
Github-Client(ANDROID)开源之旅(二) ------ 浅析ActionBarSherkLock
查看>>
React-Native 之 GD (十六)首页筛选功能
查看>>
SSISDB5:使用TSQL脚本执行Package
查看>>
asp.net后台进程做定时任务
查看>>
java接口中多继承的问题
查看>>
索引笔记《二》确定需要建立索引的列
查看>>
libjpeg的问题
查看>>
嵌入式 详解udev
查看>>
云安全:这也是需要花大钱去建设的部分
查看>>
中国电信集采终端6700万部 金额达1070亿元
查看>>
2016年的十个数据中心故事
查看>>
《Java并发编程的艺术》一一3.3 顺序一致性
查看>>
《设计之外——比修图更重要的111件事》—第1部分3 虚心学习
查看>>
EVCache —— Netflix 的分布式内存数据存储
查看>>