首页 > 数据库 >2022-8-20 数据库连接池

2022-8-20 数据库连接池

时间:2022-08-20 16:35:39浏览次数:76  
标签:20 properties 获取 DataSource 2022 import 连接 连接池

1. 概念:其实就是一个容器(集合),存放数据库连接的容器。

    当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器

2. 好处:

1. 节约资源
2. 用户访问高效

3. 实现:

1. 标准接口:DataSource   javax.sql包下的
	1. 方法:
		* 获取连接:getConnection()
		* 归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接

2. 一般我们不去实现它,有数据库厂商来实现
	 * (1)C3P0,
             * (2)DBCP,
             * (3)Druid(德鲁伊)数据库连接池,最好用的连接池。
             *      阿里巴巴开源平台上的一个数据库连接池实现,整合了C3P0和DBCP各自的优点
             *      加入了日志监控,可以监控sql语句的执行情况。
             * (4)Hikari(光),目前最快的连接池。springboot默认的连接池。
  • 必须有对应的属性文件
  • .properties
  • 约定 > 配置 > 编码

Druid:数据库连接池实现技术,由阿里巴巴提供的

	1. 步骤:
		1. 导入jar包 
		2. 定义配置文件:
			* 是properties形式的
			* 可以叫任意名称,可以放在任意目录下
		3. 加载配置文件。Properties
		4. 获取数据库连接池对象:通过工厂来来获取  DruidDataSourceFactory
		5. 获取连接:getConnection
	* 代码:
		 //3.加载配置文件
		Properties pro = new Properties();
		InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
		pro.load(is);
		//4.获取连接池对象
		DataSource ds = DruidDataSourceFactory.createDataSource(pro);
		//5.获取连接
		Connection conn = ds.getConnection();
	2. 定义工具类
		1. 定义一个类 JDBCUtils
		2. 提供静态代码块加载配置文件,初始化连接池对象
		3. 提供方法
			1. 获取连接方法:通过数据库连接池获取连接
			2. 释放资源
			3. 获取连接池的方法

Druid

Hikari

JDBCUtils

public class JDBCUtils {
	//1.定义成员变量 DataSource
	private static DataSource ds;
	static {
		try {
			//1.加载配置文件
			Properties pro = new Properties();
			pro.load(JDBCUtils.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) {
			   /* 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;
			}

		}

连接池

package com.jsoft.util;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.jsoft.morning.Ch01;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Objects;
import java.util.Properties;
public class BaseDao {
	public static final DataSource DATA_SOURCE;
	static {
		Properties properties = new Properties();
		try {
			properties.load(Ch01.class.getClassLoader().getResourceAsStream("druid.properties"));
			// 创建德鲁伊的数据源
			DATA_SOURCE = DruidDataSourceFactory.createDataSource(properties);
		} catch (IOException e) {
			throw new RuntimeException(e);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	public static void release(Statement stmt, ResultSet rs) {
		if(Objects.nonNull(stmt)) {
			try {
				stmt.close();
			} catch (SQLException e) {
				throw new RuntimeException(e);
			}
		}
		if(Objects.nonNull(rs)){
			try {
				rs.close();
			} catch (SQLException e) {
				throw new RuntimeException(e);
			}
		}
	}
}

标签:20,properties,获取,DataSource,2022,import,连接,连接池
From: https://www.cnblogs.com/ychptz/p/16607999.html

相关文章

  • 2022-08-20 第二小组 张晟源(数据库连接池,queryRunner)
    JDBC(数据库连接池,queryRunner)一,数据库连接池Connection是一个稀有资源,一个连接就创造了一个资源同时在线人很多,服务器可能崩溃1.设置只有自己2.服务器人数限制,设置排......
  • 【2022牛客多校】第五场 Crazy Thursday 二分+字符串哈希
    https://ac.nowcoder.com/acm/contest/33190/G题意给你一个长为n的字符串s,求s中分别以'k'、'f'、'c'结尾的回文串数量\(n<=5e5\)思路首先暴力枚举区间端点加判断,为......
  • JAVA入门2022年8月19日
    第一节1.注释是什么写在程序中对程序进行解释说明的文字。2.java中书写注释的方法有几种,各自有什么不同//        单行注释/**/   ......
  • 2022 HDU多校1
    String(扩展KMP、差分)Problem给定一个字符串\(S\),定义\(F_S\)表示满足如下条件的正整数\(x\)的数量\(1\lex\le|S|\)\(S[1,\cdots,x]=S[|S|-x+1,|S|]\)\(S[1,\cdot......
  • P5677 [GZOI2017]配对统计做题笔记
    一道花了两天的题目,主要是因为死活找不出bug。从树状数组题单里翻出来的,看了第一篇题解。主要思路是把输入的点从小到大排序,统计“好的配对”的数量,统计方法为若当前数和......
  • NOIP2022模拟赛二 By ZJ 8.20
    Preface昨天睡得有点晚因此今天脑子不是很清醒……T1本来一眼秒了的,结果自己数\(n=4\)的个数的时候输错了就以为自己错了后来写了个假算法发现全场就我没过T1:(A.「NOI......
  • 8.20总结
    BlueMary的战役地图\(solution\)暴力卡常时间复杂度较高\(O(n^7)\)优化后可过:倒叙枚举边长,一旦找到就输出ACCode#include<bits/stdc++.h>usingnamespacestd......
  • [网鼎杯2018]Unfinish-1|SQL注入|二次注入
    1、进入题目之后只有一个登录界面,检查源代码信息并没有发现有用的信息,尝试万能密码登录也不行,结果如下:2、进行目录扫描,发现了注册界面:register.php,结果如下:3、那就访问......
  • Adobe Bridge 2022 for mac(br2022)资源管理软件
    Bridge2022mac版更新了,这是一款Adobe系列的资源管理软件,它拥有强大的媒体集中资产访问功能:可以查看、搜索、排序、管理和处理图像文件。软件可以使用高级过滤器、集合和......
  • lvgl在vs2022上的使用
    下载源码:https://github.com/fanlulin/lv_port_win_visual_studio.git使用git命令下载,下载之后,需要注意lvgl文件夹是否为空,为空则需要重新拉取打开.sln文件,选择vs2022......