适用软件平台:
Universal Connection Pool - Version: 11.1.0.7.0 and later [Release: and later ]
Information in this document applies to any platform.
目标
随着数据库11.1.0.7的发布,甲骨文也相应发布了新的普适JDBC连接池,普适链接池资料库是一个功能完备的连接池管理连接。专注于密集数据库的Java应用程序使用连接池能够改善性能并能更好的利用系统资源。
实现方法
入门:
(1)连接池设计和使用要求JRE 1.5 或更高版本
(2)JCBC驱动程序或链接工厂类可以返回java.sql.Connection和javax.sql.XAConnection对象。驱动程序支持甲骨文10.1或更高版本。Oracle数据库有非常高级的功能和特点,例如如Oracle RAC快速连接故障切换,需要与Oracle客户端软件包括Oracle通知服务库(ons.jar)。
Ucp.jar必须包含到环境变量classpath当中。
一个支持SQL语句的数据库。像OracleRAC和快速链接的Failover等高级功能需要甲骨文数据库。
基本示例
下列例子基于oracle数据库连接
(1) 从下面链接上下载UCP.jar
http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html
(2) 下载你想用的Oracle JDBC驱动器在本例中使用JDK1.6,所以我们下载ojdbc6.jar 11.1.0.7版本.连接如下
http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html
oracle 数据库11g发行版本1.(11.1.0.7)、(11.1.0.7)驱动
(3) 首先确保你有一个OJDBC 6可用的JDK1.6,如果想要使用JDK 1.5 请下载OJDBC以作相应的替换。一下是用JDK1.6为示例。
D:\temp\notes>set PATH=D:\jdev\jdk16\bin;%PATH%
D:\temp\notes>java –version
Java 版本 “1.6.0_07”
Java(TM) SE 运行时间环境 (build 1.6.0_07-b06)
Java HotSpot(TM) 客户端 VM (build 10.0-b23, mixed mode, sharing)
D:\temp\notes>
(4) 分别将ucp.jar 和ojdbc6.jar添加到系统变量中,如:
D:\temp\notes>set CLASSPATH=ojdbc6.jar;ucp.jar;.
(5)创建如下java类“BasicDemo.java”以保证能完全连接到Oracle数据库
package support.au.ucp;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import oracle.ucp.jdbc.PoolDataSource;
import oracle.ucp.jdbc.PoolDataSourceFactory;
public class BasicDemo
{
private PoolDataSource pds = null;
public BasicDemo() throws SQLException
{
// Create pool-enabled data source instance.
pds = PoolDataSourceFactory.getPoolDataSource();
// PoolDataSource and UCP configuration
//set the connection properties on the data source and pool properties
pds.setUser("scott");
pds.setPassword("tiger");
pds.setURL("jdbc:oracle:thin:@//xxxx.au.oracle.com:1521/linux11g");
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
pds.setInitialPoolSize(10);
pds.setMinPoolSize(10);
pds.setMaxPoolSize(20);
}
public void displayPoolDetails () throws SQLException
{
System.out.println("-----------");
System.out.println("NumberOfAvailableConnections: " +
pds.getAvailableConnectionsCount());
System.out.println("BorrowedConnectionsCount: " +
pds.getBorrowedConnectionsCount());
System.out.println("-----------");
}
public void run () throws SQLException
{
List connList = new ArrayList();
for (int i = 0; i < 5 ;i++ )
{
//Get a database connection from the datasource.
Connection conn = pds.getConnection();
System.out.println("Retrieved a connection from pool");
displayPoolDetails();
connList.add(conn);
}
// close all connections
for (int j = 0; j < connList.size() ; j++)
{
((Connection)connList.get(j)).close();
}
//finally display pool details again
displayPoolDetails();
}
public static void main(String[] args)
{
System.out.println("Started at " + new Date());
try
{
BasicDemo basicDemo = new BasicDemo();
basicDemo.run();
}
catch (SQLException e)
{
System.out.println("SQLException occurred : " + e.getMessage());
}
System.out.println("Ended at " + new Date());
}
}
编译执行:
2009 -1-15 星期四 09:47:34启动
在连接池中取回了一个连接
NumberOfAvailableConnections: 9
BorrowedConnectionsCount: 1
在连接池中取回了一个连接
NumberOfAvailableConnections: 8
BorrowedConnectionsCount: 2
在连接池中取回了一个连接
-----------
NumberOfAvailableConnections:7
BorrowedConnectionsCount:3
在连接池中取回了一个连接
NumberOfAvailableConnections:6
BorrowedConnectionsCount:4
在连接池中取回了一个连接
NumberOfAvailableConnections:5
BorrowedConnectionsCount:5
把链接归还给连接池
NumberOfAvailableConnections:10
BorrowedConnectionsCount:0
2009-1-15 星期四 09:47:36 执行结束
D:\ temp\notes>