1.入门
连接池概述
连接池是数据库连接对象的缓存。这些对象表示应用程序可以用来连接到数据库的物理数据库连接。在运行时,应用程序从池中请求连接。如果池包含可以满足请求的连接,它会将连接返回给应用程序。如果未找到连接,则会创建一个新连接并将其返回给应用程序。应用程序使用连接对数据库执行一些工作,然后将对象返回到池中。然后该连接可用于下一个连接请求。
连接池促进了连接对象的重用并减少了创建连接对象的次数。连接池显着提高了数据库密集型应用程序的性能,因为创建连接对象在时间和资源方面都是昂贵的。网络通信、读取连接字符串、身份验证、事务登记和内存分配等任务都会占用创建连接对象所需的时间和资源。此外,由于连接已经创建,应用程序等待获取连接的时间更少。
连接池通常提供用于优化池性能的属性。这些属性控制行为,例如池中允许的最小和最大连接数,或者连接在返回池之前可以保持空闲的时间。最佳配置的连接池在快速响应时间与维护池中连接所花费的内存之间取得平衡。通常需要尝试不同的设置,直到针对特定应用实现最佳平衡。
所需要的驱动程序需要从ORACLE官网下载,并手动导入到项目中(如果不使用idea导入,则需要修改classpath),使用版本不同的ojdbc8.jar和ucp.jar,将会导java.lang.ClassNotFoundException: oracle.jdbc.pooling.Factory错误
地址:12.2.0.1 - JDBC and UCP Download Page
package org.example;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import oracle.ucp.jdbc.PoolDataSourceFactory;
import oracle.ucp.jdbc.PoolDataSource;
public class J07 {
public static void main() throws SQLException {
try
{
//Create pool-enabled data source instance.
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
//set the connection properties on the data source.
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
// pds.setURL("jdbc:oracle:thin:@myhost:1521/ORCL");
pds.setURL("jdbc:oracle:thin:apps/apps@myhost:1521:ORCL");
//pds.setUser("apps");
// pds.setPassword("apps");
//Override any pool properties.
pds.setInitialPoolSize(5);
//Get a database connection from the datasource.
Connection conn = pds.getConnection();
System.out.println("\nConnection obtained from " +
"UniversalConnectionPool\n");
//do some work with the connection.
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("select * from emp");
while (rset.next()) {
System.out.println(rset.getString(1));
System.out.println(rset.getString(2));
}
//Close the Connection.
conn.close();
conn=null;
System.out.println("Connection returned to the " +
"UniversalConnectionPool\n");
}
catch(SQLException e)
{
System.out.println("BasicConnectionExample - " +
"main()-SQLException occurred : "
+ e.getMessage());
}
}
}