黑马就业班(01.JavaSE Java语言基础\13.JDBC)——part2:JDBC连接池&JDBCTemplate

今日内容

1. 数据库连接池

2. Spring JDBC : JDBC Template

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

1. 节约资源
2. 用户访问高效
获取数据库连接其实就是向操作系统底层获取资源,这种获取资源的方式其实是十分耗时的。

  实现:

1. 标准接口:DataSource   javax.sql包下的
sun公司没有给DataSource接口提供实现类,DataSource接口由驱动程序供应商(既数据库厂商实现)实现。
	1. 方法:
		* 获取连接:getConnection()
		* 归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接

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

C3P0:数据库连接池技术

  步骤:

1. 导入jar包 (两个) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar(依赖jar包) ,
* 不要忘记导入数据库驱动jar包
2. 定义配置文件:
	* 名称: c3p0.properties 或者 c3p0-config.xml(只有把配置文件命名成为这两个名字,系统才能找到)
	* 路径:直接将文件放在src目录下即可。

3. 创建核心对象 数据库连接池对象 ComboPooledDataSource
4. 获取连接: getConnection

我们想使用别人提供的数据库连接池,别人是实现DataSource对象创建这个连接池的。我们首先需要导入别人的实现jar包,如这里导入了C3P0数据库连接池的2个jar包,这样我们就可以使用数据库连接池的功能。
(注意导入数据库驱动jar包,因为我们始终都是要获取数据库的连接,那么就必须要驱动数据库,那么就必须获取数据库驱动jar包),另外,需要注意导入的jar包必须添加到当前项目的类库(Add as library)。
其次,我们想要获取C3P0的jar包所提供的数据库连接,获取数据库连接对象有2种方法(如C3P0文档介绍),硬编码的形式(像之前一样获取连接)不推荐,还有一种是通过配置文件获取。文档说明如下:
Configuration files are normally looked up under standard names (c3p0.properties or c3p0-config.xml) at the top level of an application's classpath
配置文件一般命名为“c3p0.properties”或者“c3p0-config.xml”,且系统会自动在当前应用的classpath最顶层路径下面取寻找这两个文件,而我们的src包的路径会默认放到classpath下,因此我们将数据库连接池的配置文件放到src包的路径下即可,这样在使用的时候系统就能通过classpath找到配置文件。
这个配置文件就类似于我们之前所使用的“jdbc.properties”这个配置文件,同样是从配置文件来获取数据库连接,而我们所导入的C3P0的jar包,提供的是数据库连接池底层的实现。
接下来数据库连接池对象 ComboPooledDataSource,然后就可以获取数据库连接。

  代码:

package lkj.test.C3P0Demo;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * c3p0的演示
 */
public class C3P0Demo1
{
   
    public static void main(String[] args) throws SQLException
    {
   
        //我们导入C3P0的jar包以及数据库驱动包,并导入C3P0的配置文件之后,就可以开始获取数据库连接对象
        //数据库注册驱动C3P0jar包以及配置文件已经在底层完成,我们这里可以直接使用CombopooledDataSource对象来获取数据库连接池的数据库连接对象。
        //1.创建数据库连接池对象
        DataSource ds = new ComboPooledDataSource();
        //2. 获取连接对象
        Connection con = ds.getConnection();

        System.out.println(con);
//com.mchange.v2.c3p0.impl.NewProxyConnection@ba4d54 [wrapping: com.mysql.jdbc.JDBC4Connection@12bc6874]
    }
}

在这里插入图片描述
在这里插入图片描述
  接下来我们对配置文件c3p0-config.xml进行解析。

package lkj.test.C3P0Demo;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mchange.v2.c3p0.DataSources;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * c3p0-config.xml文件配置信息的验证
 */
public class C3P0Demo1
{
   
    public static void main(String[] args) throws SQLException
    {
   

        testNamedConfig();

        //验证连接池参数 ——最大的连接数量(这里会使用第一个默认配置)
        //同样先创建数据库连接池对象(注意是DataSource不是DataSources)
//        DataSource ds = new ComboPooledDataSource();

//        for (int i = 0; i < 11; i++)
//        {
   
//            Connection con = ds.getConnection();
//            //设置数据库连接池最大连接数量也10,全部获取到
//            System.out.println(i+" : "+con);
//
//            //如果我们尝试获取11个,获取到10个之后,等待延时3秒之后就会报错
//        }

//        for (int i = 0; i < 11; i++)
//        {
   
//            Connection con = ds.getConnection();
//            System.out.println(i+" : "+con);

            //如果我们想获取11个,我们可以用connection的close方法,归还连接
//            if(i==5)
//            {
   
                //我们将i=5时的所获取的数据库连接归还给连接池,这样就可以第11次获取数据库连接
                //注意,只在i=5时归还一个连接,因此没办法第12次获取
//                con.close();//归还连接到连接池中
//            }
//        }
    }

    //named-config:匿名配置的验证
    //多个配置使得我们可以在获取连接的时候使用不同的config配置,使得使用更加方便
    public static void testNamedConfig() throws SQLException
    {
   
        //获取数据库连接池对象(使用匿名配置)
        DataSource ds = new ComboPooledDataSource("otherc3p0");

        for (int i = 0; i < 9; i++)
        {
   
            //匿名“otherc3p0”配置设置的最大连接数是8,尝试获取9个连接会报错
            //使用的时候注意指定好数据库为db2
            Connection con = ds.getConnection();
            System.out.println(i + " : " + con);
        }
    }
}

在这里插入图片描述

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

  步骤:

1. 导入jar包 druid-1.0.9.jar(同样记得导入数据库驱动jar包)
2. 定义配置文件:
	* 是properties形式的
	* 可以叫任意名称,可以放在任意目录下(因为可以叫任意名称,可以任意加载,说明系统不会像C3P0一样自动读取配置文件,而需要我们手动加载)
3. 加载配置文件。Properties
4. 获取数据库连接池对象:通过工厂来来获取  DruidDataSourceFactory的createDataSource(new Properties)方法,参数是加载了相应配置文件读取流的Properties对象。
5. 获取连接:getConnection

  代码:

package lkj.test.druidDemo;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值