您好,欢迎访问三七文档
第16章OracleJDBC连接池和缓存本章简介•JDBC连接池不为每个请求创建一个新连接,而是预先创建一个数据库连接,每当JDBC程序需要临时访问数据库时就使用这个连接。•创建一个连接缓存(ConnectionCache)间接地使用连接池,连接缓存在创建一个连接池后,可以在需要时向连接池自动添加连接。•本章通过示例,介绍JDBC连接池以及连接缓冲的实现方式。16.1OracleJDBC连接池和缓存包接口名称接口描述DataSourceDataSource对象是Connection对象的工厂OracleDataSourceDataSource类的Oracle版本ConnectionPoolDataSourceConnectionPoolDataSource对象是PooledConnection对象的工厂PooledConnectionPooledConnection对象是为连接池管理提供关联的连接对象16.2实现OracleJDBC连接池(1)创建一个连接池数据源对象。(2)使用这个连接池数据源对象设置物理数据库连接的属性。(3)创建一个缓冲的连接对象,它代表物理数据库连接。(4)请求、使用和最终关闭连接实例。使用连接实例访问数据库。需要再次访问数据库时,只需请求另一个连接实例。(5)关闭连接池的连接对象。16.2.1创建一个连接池数据源对象•OracleConnectionPoolDataSource类实现了javax.sql包中定义的ConnectionPoolDataSource接口,还扩展了OracleDataSource类。•例如,下面的语句:OracleConnectionPoolDataSourcemyOCPDS=newOracleConnectionPoolDataSource();16.2.2设置物理数据库连接的属性属性名称属性描述类型databaseName数据库名(OracleID)StringdataSourceName数据源类的名称Stringdescription数据源的说明StringnetworkProtocol用于与数据库通信的网络协议,只用于OracleJDBCOCI驱动程序,默认值为“tcp”Stringportword用户口令StringportNumberOracleNet监听器等待这个端口上的数据库连接请求。默认值为1521intserverName数据库服务器的机器名Stringuser数据库用户名String表16.3OracleDataSource属性属性名称属性描述属性类型driverType要使用的JDBC驱动程序。如果使用服务器端内部驱动程序,那么可设置为“kprb”,而且该属性的其他设置被忽略Stringurl用于指定Oracle数据库的urlStringtnsEntryName用于指定OracleNetTNSNAMES字符串,在使用OCI驱动程序时也可以用于指定数据库位置String示例:OracleDataSourcemyDataSource=newOracleDataSource();//创建Oracle数据源对象setServerName()—设置正在运行该数据库的服务器名称setDatabaseName()—设置数据库名setPortNumber()—设置OracleNet监听器在哪个端口上等待请求setDriverType()—设置用于与数据库进行通信的OracleJDBC驱动程序。setUser()—指定在数据库连接中使用的数据库用户名setPassword()—指定在数据库连接中使用的数据库口令示例:StringserverName=myDataSource.getServerName();StringdatabaseName=myDataSource.getDatabaseName();StringdriverType=myDataSource.getDriverType();StringportNumber=myDataSource.getPortNumber();示例:myOCPDS.setServerName(DELL);myOCPDS.setDatabaseName(SONGBO);myOCPDS.setPortNumber(1521);myOCPDS.setDriverType(thin);myOCPDS.setUser(store_user);myOCPDS.setPassword(store_password);16.2.3创建一个缓冲的连接对象•缓冲的连接对象代表物理连接,可以使用它请求数据库连接实例。javax.sql包中定义的OraclePooledConnection类实现了PooledConnection接口,所以可以使用这个类来创建缓冲的连接对象。•例如,下面的语句:•PooledConnectionmyPooledConnection=myOCPDS.getPooledConnection();16.2.4请求、使用和最终关闭连接实例•例如,下面的语句:•ConnectionmyConnection=myPooledConnection.getConnection();•例如,下面的语句:•myConnection.close();16.2.5关闭缓冲的连接对象•在程序结束之前,应该使用close()方法关闭PooledConnection对象。•例如,下面的语句:•myPooledConnection.close();16.3OracleJDBC连接缓存•连接缓存的主要优点如下:(1)可以使用一个连接缓存同时建立多个物理数据库连接,然后使用连接实例访问这些物理连接。(2)创建和管理表示所有物理连接所需的各个缓冲的连接对象不需要开发人员来处理。默认情况下,在需要连接的时候连接缓存会动态创建缓冲的连接对象。16.3.1创建连接缓存•OracleConnectionCacheImplmyOCCI=newOracleConnectionCacheImpl();•myOCCI.setServerName(DELL);•myOCCI.setDatabaseName(SONGBO);•myOCCI.setPortNumber(1521);•myOCCI.setDriverType(thin);•myOCCI.setUser(store_user);•myOCCI.setPassword(store_password);16.3.2请求、使用和关闭连接实例•访问数据库是通过一个连接实例实现的,所以需要使用OracleConnectionCacheImpl对象的getConnection()方法来请求一个连接实例。•例如,下面的语句使用getConnection()方法从myOCCI对象请求一个连接实例,并且将返回的连接实例存储在myConnection类的对象中。•ConnectionmyConnection=myOCCI.getConnection();16.3.3关闭连接缓存•在程序结束之前,应该使用close()方法关闭OracleConnectionCacheImpl对象。•例如,下面的语句:•myOCCI.close();•关闭myOCCI也会关闭缓存中的所有PooledConnection对象。16.3.5控制PooledConnection对象数量有下列3种连接缓存模式:(1)dynamic——这是默认的模式,通常应该使用这种模式。在请求连接实例时,如果满足这两个条件,那么将创建一个新的PooledConnection对象来满足这个请求。当连接实例被关闭时,为处理请求而创建的额外PooledConnection对象被关闭。(2)fixedwait——在请求连接实例时,如果前面的条件成立,那么请求被迫等待有连接实例空闲下来。(3)fixedwithnowait——在请求连接实例时,如果前面的条件成立,那么请求立即被拒绝(不等待响应),而且对getConnection()方法的调用返回null。•示例:•myOCCI.setCacheScheme(OracleConnectionCacheImpl.DYNAMIC_SCHEME);•myOCCI.setCacheScheme(OracleConnectionCacheImpl.FIXED_WAIT_SCHEME);•myOCCI.setCacheScheme(OracleConnectionCacheImpl.FIX_RETURN_NULL_SCHEME);16.4本章小结•OracleJDBC连接池实际上就是一个存储数据库连接的容器,当JDBC程序需要连接数据库时,就直接从连接池中获取一个连接,当使用结束时,再将连接归还给连接池。•这样一个数据库连接可以被很多JDBC程序实例共享,无需每次与数据库交互时都进行数据库的连接与断开,大大提高了访问数据库的速度。•有时候一个JDBC程序需要访问不同的数据库,这就需要为每一个数据库都建立一个连接池。•OracleJDBC连接缓存就是用于管理和优化JDBC连接池的管理器。
本文标题:第16章 Oracle JDBC连接池和缓存 161 Oracle JDBC连接池和缓存包
链接地址:https://www.777doc.com/doc-14288 .html