数据库连接池 笔记

数据库连接池概念:其实就是一个容器(集合),存放数据库连接的容器,当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完毕之后,会将连接对象归还给容器

好处:1、节约资源 2、用户访问高效

DataSource 来自jdk帮助文档

  • 一个连接到这个DataSource对象所代表的物理数据源的工厂。 对于DriverManager设备的替代方案, DataSource对象是获取连接的首选方法。 实现DataSource接口的对象通常将基于Java“命名和目录(JNDI)API”的命名服务进行注册。

    DataSource接口由驱动程序供应商实现。 有三种类型的实现:

    1. 基本实现 - 生成标准的Connection对象
    2. 连接池实现 - 生成将自动参与连接池的Connection对象。 此实现与中间层连接池管理器配合使用。
    3. 分布式事务实现 - 生成可用于分布式事务的Connection对象,并且几乎总是参与连接池。 此实现与中间层事务管理器一起工作,并且几乎总是使用连接池管理器。

    一个DataSource对象具有必要时可以修改的属性。 例如,如果将数据源移动到其他服务器,则可以更改服务器的属性。 好处是因为可以更改数据源的属性,所以不需要更改访问该数据源的任何代码。

    通过DataSource对象访问的驱动程序不会自动注册DriverManager 。 相反,通过查找操作检索DataSource对象,然后用于创建一个Connection对象。 通过基本实现,通过DataSource对象获得的连接与通过DriverManager工具获得的连接相同。

    DataSource的实现必须包含一个public no-arg构造函数。

实现: 标准接口:DataSource              javax.sql包下  方法获取连接:getConnection()

 归还连接:Connection.close() 如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法则不会再关闭连接了,而是归还连接                                                               

一般来说我们不去实现它,由数据库厂商来实现  有C3P0:数据库连接池技术和Druid:数据库连接池技术 由阿里巴巴提供

C3P0:数据库连接池技术 步骤:1、导入jar包两个()c3p0-0.9.5.2.jar mchange-commons-java-o.2.12.jar

2、定义配置文件:名称c3p0.properties or c3p0-config.xml路径:直接将文件放在src目录下即可 

3、创建核心对象 数据库连接池对象:DataSource ds=new CombopoolceDataSource()

4、获取连接:getConnection()

Druid:数据库连接池技术 由阿里巴巴提供 步骤1、导入jar包 druid-1.o.9.jar

2、定义配置文件:是properties形式的 可以叫任意名称,可以放在任意目录下

3、加载配置文件 Properties

4、获取数据库连接池对象:通过工厂来获取 DruidDataSourceFactory

5、获取连接:getConnection()

Druid数据库连接池的工具类

1、定义成员变量 DataSource

 

	private static DataSource ds;
	static{
	    try{
	        Properties pro=new Properties();
	        pro.load("类名".class.getClassLoader().getResourceAsStream("druid.properties"));
	        ds=DruidDataSourceFactory.createDataSource(pro);

	    }catch(Exception e){
	            e.printStackTrace();
	    }
	
	}

	public static Connection getConnection() throws SQLException {
		return ds.getConnection();
	}

	public static void close(Statement stmt, Connection conn) {
		if (stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
public static void close(ResultSet rs, Statement stmt, Connection conn) {
        if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

public static DataSource getDataSource(){
    return ds;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值