zoukankan      html  css  js  c++  java
  • JAVA基础知识之JDBC——JDBC数据库连接池

    JDBC数据库连接池

    数据库的连接和关闭是很耗费资源的操作,前面介绍的DriverManager方式获取的数据库连接,一个Connection对象就对应了一个物理数据库连接,每次操作都要打开一个连接,使用完关闭,需要使用时又重新连接。这将严重影响系统性能。

    为了解决这个问题,JDBC2.0引入了数据库连接池。当程序启动时,系统预先创建一批数据库连接对象,形成一个连接池。当程序请求连接时,不需要重新打开物理数据库连接,而是从连接池中获取一个连接,使用完之后,也不是直接关闭物理数据库连接,而是将这个连接对象再次放入连接池。通过使用连接池,大大提高程序性能。

    JDBC提供了连接池接口,即javax.sql.DataSource. 一些商用服务器(例如WebLogic, Websphere)提供了具体实现。另外也有一些开源组织提供了实现,例如DBCP和C3P0)

    DBCP数据源

    这是apache针对JDBC的DataSource接口的开源实现,Tomcat的连接池就是使用它来实现的。

    要使用DBCP,需要在工程类库中加入,commons-dbcp.jar和commons-pool.jar两个包。

    典型的用法如,

     1         // 创建连接池连接对象
     2         BasicDataSource ds = new BasicDataSource();
     3         // 连接池的数据库配置信息
     4         ds.setDriverClassName("com.mysql.jdbc.Driver");
     5         ds.setUrl("url=jdbc:mysql://127.0.0.1:3306/dedecms?useUnicode=true&characterEncoding=utf8");
     6         ds.setUsername("root");
     7         ds.setPassword("pass");
     8         // 设置连接池的初始连接数
     9         ds.setInitialSize(5);
    10         // 设置连接池最多可以有多少个活动连接
    11         ds.setMaxActive(20);

    实际应用中,建议将连接池对象设置为static,这样在需要使用数据连接的地方,只需要通过ds获取一个连接池中的连接即可,使用完之后再放回连接池,

    1         //从连接池中拿出一个连接来使用
    2         Connection conn = ds.getConnection();
    3         //并非关闭物理连接,而是把连接对象放回连接池
    4         conn.close();

    C3P0连接池

    C3P0不仅可以自动清理不再使用的Connection,还可以清理Statement和ResultSet.因此Hibernate就推荐使用它。

    要使用C3P0,只需要在工程中引入c3p0-xxxx.jar包即可,典型用法跟DBCP差不多,

     1         ComboPooledDataSource ds = new ComboPooledDataSource();
     2         // 连接池的数据库配置信息
     3         ds.setDriverClassName("com.mysql.jdbc.Driver");
     4         ds.setUrl("url=jdbc:mysql://127.0.0.1:3306/dedecms?useUnicode=true&characterEncoding=utf8");
     5         ds.setUsername("root");
     6         ds.setPassword("pass");
     7         // 设置连接池的初始连接数
     8         ds.setInitialSize(40);
     9         // 设置最大连接数
    10         ds.setMaxPoolSize(2);
    11         // 设置最小连接数
    12         ds.setMinPoolSize(2);
    13         // 设置连接池缓存Statement的最大数
    14         ds.setMaxStatements(180);
    15         
    16         Connection conn = ds.getConnection();
  • 相关阅读:
    Struts系列教材 (四)- 基础
    Struts系列教材 (三)- 基础
    Struts系列教材 (一)- 基础
    Hibernate系列教材 (三十)- 注解
    网络之AFNetworking
    iOS网络学习之“远离NSURLConnection 走进NSURLSession”
    ios中常见数据存储方式以及SQLite常用的语句
    利用"仿射变换"制作“酷炫特效”
    图片滚动新闻和新闻的滚动菜单
    简易聊天窗口
  • 原文地址:https://www.cnblogs.com/fysola/p/6186959.html
Copyright © 2011-2022 走看看