数据库连接池

一、数据库连接池

1. 概念:一个容器(集合),存放数据库连接对象的池子。

用户来访问数据库时,从容器中获取连接对象;用户访问结束,将连接对象归还给容器

2. 优点:节约系统资源;高效。
3. 实现

(1)标准接口:DataSource javax.sql包下的
一些常用方法:
获取连接:getConnection()
归还连接:Connection.close() 如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接,而是归还连接
(2)一般不会去实现这个接口,而是由数据库厂商实现接口

  1. C3P0:数据库连接池技术
  2. Druid:数据库连接池技术,由阿里巴巴提供
4. C3P0:数据库连接池技术

(1)使用步骤

  1. 导入jar包(导入两个jar包,C3P0包依赖另一个jar包)另外不要忘记导入数据库的驱动jar包
  2. 定义配置文件(包括数据库名称、用户名、密码等)
  • 名称:c3p0.properties or c3p0-config.xml C3P0会自动查找这个名字对应的配置文件
  • 路径:直接将文件放在src目录下即可
  1. 创建核心对象:数据库连接池对象 ComboPooledDataSource
  2. 获取连接:getConnection()
/*
* C3P0演示
*/
public class C3P0Demo {
	public static void main(String[] args) throws SQLException {
		// 1.创建数据库连接池对象
		Date=aSource ds = new ComboPooledDataSource();
		// 2.获取连接对象
		Connection conn = ds.getConnection();
		// 3.打印连接对象
		System.out.println(conn);
	}
}
5. Druid:数据库连接池技术,由阿里巴巴提供

(1)使用步骤

  1. 导入jar包(导入一个jar包即可)另外不要忘记导入数据库的驱动jar包
  2. 定义配置文件(包括数据库名称、用户名、密码等)
  • 特点1:是properties形式的
  • 特点2:可以放在任意目录下,叫任意的名称
  1. 加载配置文件 Properties
  2. 获取数据库连接池对象:通过工厂类来获取 DruidDataSourceFactory
  3. 获取连接:getConnection()
/*
* Druid演示
*/
public class DruidDemo {
	public static void main(String[] args) throws SQLException {
		// 1.导入jar包
		// 2.定义配置文件
		// 3.加载配置文件
		Properties pro = new Properties();
		InputStream is = DruidDemo.class.getClassLoder().getResourceAsStream("druid.properties");
		pro.load(is);
		// 4.获取数据库连接池对象
		DataSource ds = DruidDataSourceFactory.createDataSource(pro);
		// 5.获取连接
		Connection conn = ds.getConnection();
		// 6.打印连接对象
		System.out.println(conn);
	}
}

(2)工具类
一般使用时,会定义一个Druid工具类

  1. 定义一个类:JDBCUtils
  2. 提供静态代码块加载配置文件,初始化数据库连接池对象
  3. 提供方法:
  • 获取连接方法:通过数据库连接池获取连接
  • 释放资源
  • 获取连接池方法
/*
* Druid工具类
* 定义JDBCUtils工具类
*/
public class JDBCUtils {
	// 1.定义成员变量 DataSource
	private static DataSource ds;
	static {
		try {
			// 1.加载配置文件
			Properties pro = new Properties();
			pro.load(JDBCUtilds.class.getClassLoader().getResourceAsStream("druid.properties"));
			// 2.获取 DataSource
			ds = DruidDataSourceFactory.createDataSource(pro);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/*
	* 获取连接对象方法
	*/
	public static Connection getConnection() throws SQLException {
		return ds.getConnection();
	}

	/*
	* 释放资源方法
	*/
	// 重载
	public static void close(Statement stmt, Connection conn) {
		return close(null, stmt, conn);
	}
	
	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;
	}
}
/*
* 使用Druid工具类
*/
public class DruidDemo {
	public static void main(String[] args) {
		/*
		* 完成添加操作,给account表添加一条记录
		*/
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			// 1.获取连接
			conn = JDBCUtils.getConnection();
			// 2.定义sql
			String sql = "insert into account values(null, ?, ?)";
			// 3.获取pstmt对象
			pstmt = conn.preparedStatement(sql);
			// 4.给?赋值
			pstmt.setString(1, "wanwu");
			pstmt.setDouble(2, 3000);
			// 5.执行sql
			int count = pstmt.executeUpdate();
			// 执行成功,打印1
			System.out.println(count);
		} catch(SQLException e) {
			e.printStackTrace();
		} finally {
			// 6.释放资源
			JDBCUtils.close(pstmt, conn);
		}
	}
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值