JDBC学习笔记(三):连接Oracle数据库(连接池)

16 篇文章 0 订阅

使用连接池的目的:

频繁的获取与关闭Connecitoon对象会耗费太多资源


连接池的作用:

用获取连接池的连接来代替新建连接。

用将连接归还给连接池来代替关闭连接。

JAVA常用连接池:C3P0,DBCP。


连接池的原理与实现细节:

建立连接池时自动创建多个空闲连接,数目由InitialSize属性决定。

每当获取一个连接池中的连接,此连接便被占用。

当空闲连接小于连接池的最小空闲连接时,自动创建一批新的连接,直到达到最大连接数为止。

当最大连接数的连接全部被占用时,会出现拥塞。

当空闲连接大于连接池的最大空闲连接时,自动收回一批连接。


DBCP工具类代码实现(创建连接池,获取连接,归还连接):

<span style="font-size:14px;">package util;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import org.apache.commons.dbcp.BasicDataSource;

/**
 * @author ZP
 *	管理连接的工具类(连接池)
 */
public class DBUtil {
	
	//Sun对连接池提供了统一的接口:DataSource
	//由不同的厂商加以实现,其实现类不同。
	//一个项目有一个连接池就够了,它能创建很多连接。
	private static BasicDataSource ds;
	
	static{
			//1.读取连接参数。
		Properties p = new Properties();
		try {
			p.load(DBUtil.class
					.getClassLoader()
					.getSystemResourceAsStream("util/db.properties"));		//使用ClassLoader获取流对象。
			
			String driver = p.getProperty("driver");
			String url = p.getProperty("url");
			String user = p.getProperty("user");
			String pwd = p.getProperty("pwd");
			
			int initialSize = new Integer(p.getProperty("initialSize"));
			int maxActive = new Integer(p.getProperty("maxActive"));
								//String转int
										//三种方法:new Integer(String s)/Integer.parseInt(String s)/Integer.valueOf(String s)
			
			//2.创建连接池并设置参数。
				//连接的参数
			ds = new BasicDataSource();
			ds.setDriverClassName(driver);
			ds.setUrl(url);
			ds.setUsername(user);
			ds.setPassword(pwd);
				//连接池的参数
			ds.setInitialSize(initialSize);			//初始化连接的参数。(有默认值)
			ds.setMaxActive(maxActive);		//最大的连接数。
			
			} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException("读取资源文件失败",e);
		}	

	}
	
	//用创建好的db代替了DriverManager拿取一个连接。
	//异常建议抛出。
	public static Connection getConnection() throws SQLException{
		return ds.getConnection();
	}
	
	/*
	 * 连接池创建的连接,该连接的close方法被重写了
	 * 调用时,仅仅是将连接归还给池。
	 */
	public static void close(Connection con){
		if(con != null){
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
				throw new RuntimeException("归还连接失败",e);
			}
		}
	}
}</span>


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值