好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

第2讲-数据库连接池课件.ppt

36页
  • 卖家[上传人]:我***
  • 文档编号:147251842
  • 上传时间:2020-10-07
  • 文档格式:PPT
  • 文档大小:1.72MB
  • / 36 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 二,数据库连接池,第,讲,本章目标,数据连接池原理 DBCP、C3P0,JNDI 连接池配置使用,一、回顾数据库直接连接,JDBC 可做三件事:与数据库建立连接、执行SQL 语句、处理结果,Connection,DriverManager,Statement,ResultSet,,DriverManager :依据数据库的不同,管理JDBC驱动 Connection :负责连接数据库并担任传送数据的任务 Statement :由 Connection 产生、负责执行SQL语句 ResultSet:负责保存Statement执行后所产生的查询结果,客户端,数据库服务器,1,2,3,4,使用数据直接连接的缺点,在某一时刻连接必须服务于一个用户,以免造成事务冲突 来自不同用户的请求(都使用了同一个连接)对相同的事务进行操作,如果一个请求试图回滚,那么所有使用相同连接的数据库操作都要被回滚 创建连接需要耗费时间 创建一个连接大概需要1-2秒的时间 保持连接打开状态的代价很大 尤其是在系统资源(例如内存)方面 数据库产品的许可证都按照同时打开的连接数目来收费二、数据库连接池原理,什么是数据库连接池 数据库连接池:Connection pooling,它是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。

      二、数据库连接池原理,数据库连接池运行机制 从连接池获取或创建可用连接; 使用完毕之后,把连接返还给连接池; 在系统关闭前,断开所有连接并释放连接占用的系统资源; 还能够处理无效连接(原来登记为可用的连接,由于某种原因不再可用,如超时,通讯问题),并能够限制连接池中的连接总数不低于某个预定值和不超过某个预定值;,二、数据库连接池原理,连接池示例图:,二、数据库连接池原理,使用数据库连接池技术的好处 1 资源重用 由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销在减少系统消耗的基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及数据库临时进程/线程的数量) 2 更快的系统响应速度 数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于池中备用此时连接的初始化工作均已完成对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而缩减了系统整体响应时间 3 统一的连接管理,避免数据库连接泄漏 在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接从而避免了常规数据库连接操作中可能出现的资源泄漏二、数据库连接池原理,常用的数据库连接池 基于JNDI 、C3P0 、DBCP技术的数据连接池 (1)JNDI(Java Naming and Directory Interface ):是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。

      (2)C3P0:连接池作者是星球大战迷,C3P0就是其中的一个机器人,并且这个名称中包涵connection 和pool的单词字母因此叫这个名字 (3)DBCP(DataBase connection pool):是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar ,common-collections.jar,三、连接池的使用,DBCP主要配置属性: 下面对里面几个比较重要的参数进行一下说明: name:表示你的连接池的名称也就是你要访问连接池的地址 type:是对象的类型 driverClassName:是数据库驱动的名称 url:是数据库的地址 username:是登陆数据库的用户名 password:是登陆数据库的密码 factory: 默认的使用tomcat.dbcp.BasicDataSourceFactory,可以使用 factory=mons.dbcp.BasicDataSourceFactory,就是Apache的开源的数据库连接池,但一定要把commons-dbcp-1.4.jar放到项目的lib里。

      3.1 DBCP使用,maxIdle,是最大的空闲连接数,这里取值为2,表示即使没有数据库连接时依然可以保持2空闲的连接,而不被清除,随时处于待命状态 maxWait ,最大建立连接等待时间如果超过此时间将接到异常设为-1表示无限制 maxActive是最大激活连接数,这里取值为20,表示同时最多有20个数据库连接三、连接池的使用,DBCP应用 (1)新建一个web工程 (2)把数据库包导入到lib如mysql-connector-java-5.0.8-bin (3)把common-dbcp.jar,common-pool.jar ,common-collections.jar导入到lib (4) 在WebRootMETA-INF建立文件context.xml 内容如下: ,三、连接池的使用,(5)在jsp中使用数据库连接池 导入类包 java.sql.* mons.dbcp.* java.sql.SQLException.* javax.naming.Context.* javax.naming.InitialContext javax.sql.DataSource javax.naming.NamingException,三、连接池的使用,(6)编写代码 ); out.print(dbs.getNumActive()); catch(NamingException e) e.printStackTrace(); catch(SQLException e) e.printStackTrace(); %,三、连接池的使用,3.2 C3P0使用,C3PO 连接池是一个优秀的连接池,推荐使用。

      C3PO实现了JDBC3.0规范的部分功能,因而性能更加突出 C3PO主要配置属性 ,acquireIncrement :当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 acquireRetryAttempts :定义在从数据库获取新连接失败后重复尝试的次数 acquireRetryDelay :两次连接中间隔时间,单位毫秒Default: 1000 autoCommitOnClose :连接关闭时默认将所有未提交的操作回滚Default: false Description:描述 minPoolSize:连接池中最小连接数 maxPoolSize:连接池中最大连接数 Name:连接池的名字 User:用户名 Password:密码 auth 表示认证方式,一般为Container,3.2 C3P0使用,factory :工厂类的位置,生成数据源 Type:连接池的类型 jdbcUrl:数据库地址,3.2 C3P0使用,C3P0 应用 (1) 导入包到lib c3p0-0.9.1.2.jar 、 mysql-connector-java-5.0.8-bin.jar (2)配置文件Tomcat 5.5confserver.xml 在tomcatconfserver.xml的GlobalNamingResources中增加:,3.2 C3P0使用,(3)配置文件WebRootMETA-INFcontext.xml (4)配置文件WebRootWEB-INFweb.xml DB Connection jdbc/mysqlDB javax.sql.DataSource Container ,3.2 C3P0使用,(5)编码 java.sql.* javax.naming.* javax.sql.* com.mchange.v2.c3p0.*,3.2 C3P0使用,3.2 C3P0使用,在JSP文件中中添加代码 <% Connection conn=null; try InitialContext ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup(java:comp/env/jdbc/mysqlDB); conn=ds.getConnection(); catch(NamingException ex) ex.printStackTrace(); ,String sql=select * from user; PreparedStatement ps=conn.prepareStatement(sql); ResultSet rs=ps.executeQuery(); while(rs.next()) % 字段1: 字段2: ,C3P0的另一使用方法,创建DB包,创建DBUtil类。

      创建静态方法getConn(),静态方法close()用于连接关闭数据源示例代码,public class DBCPTest private static BasicDataSource bds = null; private static ConnectionFactory cf = null; static bds = new BasicDataSource(); bds.setDriverClassName(com.microsoft.sqlserver.jdbc.SQLServerDriver); bds.setUrl(jdbc:sqlserver://127.0.0.1:1433;databaseName=AjaxDb); bds.setInitialSize(10); bds.setMaxActive(4); bds.setMaxWait(5000); bds.setUsername(sa); bds.setPassword(Zzx198461); cf = new DataSourceConnectionFactory(bds); public static Connection getConnection() throws SQLException return cf.createConnection(); public static void destroy() throws SQLException cf = null; bds.close(); bds = null; public static void main(String args) throws Exception System.out.println(DBCPTest.getConnection()); ,3.3 配置Tomcat JNDI数据库连接池 1,第一步:加载数据驱动包。

      Tomcate 5.5 将数据库驱动包拷贝到tomcathome/common/lib目录下 Tomcate 6.0 将数据库驱动包拷贝到tomcathome/lib目录下配置Tomcat JNDI数据库连接池 2,第二步:配置tomcat连接池文件 A在web工程中的META-INF创建context.xml文件 在文件中写入内容:, ,配置Tomcat JNDI数据库连接池 3,第三步: 在web.xml配置如下:, connpool javax.sql.DataSource Container ,配置Tomcat JNDI数据库连接池 4,第四步: 修改DBUtil类public class DBUtil private DBUtil() public static Connection getConn() th。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.