数据库连接池技术(c3p0 与 druid)

目录

  • 数据库连接池概念
  • 数据库连接池技术
    • 使用 C3P0 数据库连接池技术创建数据库连接对象:
    • 使用 Druid 数据库连接池技术创建数据库连接对象:
    • 使用 Druid 技术的 JDBC 工具类
    • 使用普通方法创建单个连接对象

数据库连接池概念

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

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

  • 好处:

    1.节约资源

    2.用户访问高效

接口类与方法:
标准接口:javax.sql 包下的 DataSource 接口
主要方法:

  • 获取连接:getConnection()。
  • 归还连接:conn.close()。如果连接对象 conn 是从数据库连接池中获取的,那么调用conn.close()方法,则不会再关闭连接了,而是归还连接,数据库连接池技术更改了该方法。

由数据库厂商来实现主要数据库连接池技术

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

数据库连接池技术

使用 C3P0 数据库连接池技术创建数据库连接对象:

使用步骤:

  1. 导入jar包 (两个) c3p0-0.9.5.2.jar 与 依赖的 mchange-commons-java-0.2.12.jar 。
  2. 定义配置文件:
    • 名称:c3p0.properties 或者 c3p0-config.xml (只能是这两个形式,数据库连接池会自动寻找这两种文件用来创建连接对象)(自动加载)
    • 路径:直接将配置文件放在src目录下即可(默认)。
  3. 创建核心对象:数据库连接池对象 ComboPooledDataSource
  4. 获取数据库连接对象: getConnection()

代码:

//该技术不需要加载配置文件,只要在项目中存在上述的配置文件即可,该技术会自动寻找并加载配置文件 
//该技术中已经实现注册驱动代码
//1.创建数据库连接池对象
DataSource ds  = new ComboPooledDataSource();
//2.获取连接对象
Connection conn = ds.getConnection();

使用 Druid 数据库连接池技术创建数据库连接对象:

使用步骤:

  1. 导入 jar 包 druid-1.0.9.jar
  2. 定义配置文件:
    • 是以 properties 文件形式的
    • 可以叫任意名称,可以放在任意目录下
  3. 加载 Properties 配置文件(不是自动加载的)
  4. 获取数据库连接池对象:通过工厂类来获取 DruidDataSourceFactory 的 createDataSource() 方法。
  5. 获取连接:getConnection

代码:

  //该技术需要手动加载配置文件
  //1. 创建Properties集合类
  Properties pro = new Properties();
  
  //2. 通过类加载器获得配置文件资源。加载当前类 DruidDemo 为当前类
  InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties"); 
  
  //3. 加载配置文件进内存
  pro.load(is);
  
  //该技术中已经实现注册驱动代码
  //4. 获取数据库连接池对象
  DataSource ds = DruidDataSourceFactory.createDataSource(pro);
  
  //5. 获取数据库连接对象
  Connection conn = ds.getConnection();

使用 Druid 技术的 JDBC 工具类

/*
	1. 声明静态数据源成员变量
	2. 创建连接池对象
	3. 定义公有的得到数据源的方法
	4. 定义得到连接对象的方法
	5. 定义关闭资源的方法
 */
public class JDBCUtils {
	// 1.声明静态数据源成员变量
	private static DataSource ds;

	// 2. 创建连接池对象
	static {
		try {
			// 加载配置文件中的数据
			InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
			Properties pro = new Properties();
			pro.load(is);
			// 创建连接池,使用配置文件中的参数
			ds = DruidDataSourceFactory.createDataSource(pro);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 3.定义得到数据源的方法
	public static DataSource getDataSource() {
		return ds;
	}

	// 4.定义得到连接对象的方法
	public static Connection getConnection() throws SQLException {
		return ds.getConnection();
	}

	// 5.定义关闭资源的方法
	public static void close(Connection conn, Statement stmt, ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {}
		}

		if (stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {}
		}

		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {}
		}
	}

	// 6.重载关闭方法
	public static void close(Connection conn, Statement stmt) {
		close(conn, stmt, null);
	}
}

使用普通方法创建单个连接对象

1、使用配置文件

// 不使用配置资源
// 1. 导入驱动jar包
// 2. 注册驱动
Class.forName("com.mysql.jdbc.Driver"); // 这个全类名在数据驱动包中
//3. 获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");

2、不适用配置文件

// 使用配置资源
// 创建Properties集合类
Properties pro = new Properties();

//这里使用绝对路径,但当该文件路径变了,需要改变代码。
//pro.load(new FileReader("E:\\Idea\\JDBC_project\\jdbc_module\\src\\com\\qgl\\jdbc.properties"));

//内加载器,JDBC为当前类,获得当前类的字节码文件对象。
ClassLoader cla = JDBCUtils.class.getClassLoader();

//使用该对象的getResource()方法可以得到配置文件资源。返回的是URL对象,即文件路径对象。
URL urlPath  = cla.getResource("jdbc.properties"); //放在不同级目录,参数传递的路径级数不一样。这里直接将文件放在src目录下。

//得到配置文件资源的字符串路径。
String path = urlPath.getPath();

//加载配置文件
pro.load(new FileReader(path));

//配置资源中有驱动路径数据,从配置资源中获取该数据
driver = pro.getProperty("driver");

//在JDBC数据连接使用,注册驱动
Class.forName(driver);

//获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");

你可能感兴趣的:(Java,java,jdbc)