ORACLE-JDBC-03 UCP连接池

8 篇文章 0 订阅

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());
        }
    }
}

 

 参考链接:Getting Database Connections in UCP

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值