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

使用连接池的目的:

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


连接池的作用:

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

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

JAVA常用连接池:C3P0,DBCP。


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

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

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

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

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

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


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

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


 
  

你可能感兴趣的:(笔记,java)