JAVA_ JDBC连接池、datasource接口、dbcp连接池、c3p0连接池、druid连接池、DBUtils、ResultSetHandler结果集处理类

 目标 使用C3P0创建数据源DataSource。 使用DBCP创建据源DataSource。 能够使用JDBC简化工具包DBUtils完成单表的增删改查操作。 一,使用连接池重写工具类1.为什么使用连接池重写工具类 1.因为每次创建和销毁连接都会消耗较多的系统资源 2.每次创建和销毁连接都要消耗大概0.05~1s的时间。 3.可以...
摘要由CSDN通过智能技术生成

 

目标

  • 使用C3P0创建数据源DataSource。

  • 使用DBCP创建据源DataSource。

  • 能够使用JDBC简化工具包DBUtils完成单表的增删改查操作。

一,使用连接池重写工具类

1.为什么使用连接池重写工具类

  • 1.因为每次创建和销毁连接都会消耗较多的系统资源

  • 2.每次创建和销毁连接都要消耗大概0.05~1s的时间。

  • 3.可以防止大量用户并发访问数据库服务器。

  • Connection对象在JDBC使用的时候就会去创建一个对象,使用结束以后就会将这个对象给销毁了.每次创建和销毁对象都是耗时操作.需要使用连接池对其进行优化.程序初始化的时候,初始化多个连接,将多个连接放入到池(集合)中.每次获取的时候,都可以直接从连接池中进行获取.使用结束以后,将连接归还到池中.

2.连接池原理

 

  • 目的:解决建立数据库连接耗费资源和时间很多的问题,提高性能。

3.编写连接池

3.1步骤

  • 创建一个类,定义LinkedList集合作为连接池,在静态代码块中,向集合里面添加5个连接对象

  • 添加addBack()方法,用作归还连接

  • 代码:

public class MyDataSource {
	//连接池
	static LinkedList<Connection> pool = new LinkedList<>();
	//初始化连接
	static{
		try {
			for(int i = 0; i < 5; i++){
				pool.add(JdbcUtils.getConnection());
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	//定义一个方法,从连接池中获取connection,从头部获取
	public Connection getConnectionFromPool(){
		if (pool.size() > 0) {
			//池子中有connection
			return pool.removeFirst();
		}else {
			//如果池子中没有connection,则先加入等待队列,等待队列满了的话就新建connection(新建的				//connection是不需要放回池子的,用完后直接销毁)
			return JDBCUtil.getConnection();
		}
	}
	//定义一个方法,将connection放回池子中(如果是新创建的connection则直接销毁)
	public void addBack(Connection connection){
		//pool.addLast(connection);//免不了会将新建的connection添加进池子;
		try {
			//写一个自己的connection,然后重写close()方法,通过close()方法来添加进池子。
			connection.close();//免不了会将池子中的connection销毁
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//返回pool里面连接的个数
	public int getCount(){
		return pool.size();
	}	
}

3.2 编写连接池遇到的问题

  • 如果新建了connection,用完之后怎么判别是原池子中的connection(需要放回去),还是新建的connection(需要销毁)。

3.3解决办法(自定义一个 Connection,重写close方法)

  • 继承 条件:可以控制父类的构造

  • 装饰者模式

    目的:改写已存在的类的某个方法或某些方法,装饰设计模式(包装模式)

    条件:1.包装类和被包装类实现同一个接口
    	2.包装类里面要拿到被包装类的引用

步骤:

  1. 编写一个类实现一个接口,为被包装类

  2. 编写一个类,实现与被包装类相同的接口。(具备相同的行为)

  3. 定义一个被包装类类型的变量。

  4. 定义构造方法,把被包装类类的对象注入,给被包装类变量赋值。

  5. 对于不需要改写的方法,调用被包装类类原有的方法。

  6. 对于需要重写的方法,写自己的代码。

  • 动态代理(类似装饰者模式,此处不学)

3.4datasource接口概述

  • Java为

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值