JDBC系列(九):JDBC与数据库连接池(Druid-德鲁伊)使用步骤

目录

    • 1.导语(唠唠嗑~~~)
    • 2.使用数据库连接池好处
    • 3.Druid数据库连接池创建与使用步骤
      • 3.1.创建连接池的步骤
      • 3.2使用Druid数据库连接池的步骤
    • 4.关闭资源与归还至连接池的一点说明

1.导语(唠唠嗑~~~)

Druid德鲁伊是阿里巴巴出品的一个数据库连接池,结合了DBCP、C3P0、PROXOOL等数据库连接池的优点,同时添加了日志监控功能,可以很好的监控D数据库连接池和SQL的执行情况,可以说是市场上目前性价比超高、超好用的数据库连接池。作为国人,我们应为之感到骄傲。

使用连接池,在编码上,仅仅是改变了Java程序连接数据库这一连接部分,之前是JDBC直连数据库,且运行一次程序就连接一次数据库,最重要的,每次连接数据库,就要耗费较多资源,拿钱做比喻的话,就是很烧钱!!!

程序员和资本家们,当然不能这样搞烧钱的事。

你还别说,一群比较有头脑的人,发明了一种东西—数据库连接池

简而言之,数据库连接池出现的原因,就是为了避免烧钱

2.使用数据库连接池好处

但这里还是有必要说一下,数据库连接池的好处:

  1. 连接资源重用
  2. 系统的响应速度更快
  3. 属于一种新的资源分配的手段(以前我们是从数据库服务器直接获取连接实现交互。现在我们只需要从连接池中拿连接,用完了,再放回连接池即可,而不必大费周章的去直接连接数据库)
  4. 避免服务器(一言不合就)宕机(——“不好了,老板,服务器挂了,已经有很多用户再投诉了!!!” ——“扣你工资!”)

上面已经提到,数据库连接池,相比传统直连数据库的程序编写步骤,仅仅在连接数据库方面有区别,这里仅仅对这部分做一下说明。

数据库连接池连接到数据库有两种方式,

3.Druid数据库连接池创建与使用步骤

  1. 下载jar包,自己去Web找吧

  2. 将jar文件添加到classpath中

  3. 添加配置文件druid.properties

    jdbcUrl = jdbc:mysql://localhost:3306/test
    username = root
    password = 88888888
    initialSize = 5
    maxActive = 20
    minActive = 5
    maxWait = 3000
    
  4. 编写程序获取数据源对象

    数据源对象:java.sql.DataSource接口对象,表示数据源,可以直接理解为连接池。

    所有的连接池都会有一个数据源实现这个接口。

    Druid实现这个数据源的类是:DruidDataSource

3.1.创建连接池的步骤

  1. 创建Druid数据库连接池步骤与程序(4步):

    1. 准备:我们自己可以根据需要写一个配置文件,这里命名为druid.properties。
    jdbcUrl = jdbc:mysql://localhost:3306/test
    username = root
    password = 88888888
    initialSize = 5
    maxActive = 20
    minIdle = 5
    maxWait = 3000
    
    1. 自行导入druid的jar,并buildpath
    2. 加载步骤0中的配置文件druid.properties。
    3. 创建数据源对象
    4. 设置属性
    5. 获取连接
    //1.创建连接池
        //1.加载配置文件
        Properties pro = new Properties();
        pro.load(DruidTest.class.getClassLoader().getResourceAsStream("druid.properties"));
        //2.创建数据源对象
        /*DataSource:是SUN公司声明的接口 。DruidDataSource:是阿里巴巴对应实现的类*/
        DataSource dataSource  = new DruidDataSource();
        //3.设置属性
        DruidDataSource ds = (DruidDataSource)dataSource;
        ds.setUrl(pro.getProperty("jdbcUrl"));
        ds.setUsername(pro.getProperty("username"));
        ds.setPassword(pro.getProperty("password"));
        ds.setInitialSize(new Integer(pro.getProperty("initialSize")));
        ds.setMaxActive(new Integer(pro.getProperty("maxActive")));
        ds.setMinIdle(new Integer(pro.getProperty("minIdle")));
        ds.setMaxWait(new Long(pro.getProperty("maxWait")));
        //4.获取连接。 此时就可以直接通过数据源获取可用的连接
        Connection conn = ds.getConnection();
        System.out.println(conn);//检验是否能够成功拿到一个数据库连接池中的连接
    

    3.2使用Druid数据库连接池的步骤

  2. 使用连接池操作数据库的使用完整过程与程序:

    package com.jdbc;
    
    import com.alibaba.druid.pool.DruidDataSource;
    
    import javax.sql.DataSource;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.util.Properties;
    
    public class DruidTest {
        public static void main(String[] args) throws IOException, SQLException {
            //1.创建连接池
                    //1.加载配置文件
                    Properties pro = new Properties();
                    pro.load(DruidTest.class.getClassLoader().getResourceAsStream("druid.properties"));
                    //2.创建数据源对象
                    /*DataSource:是SUN公司声明的接口 。DruidDataSource:是阿里巴巴对应实现的类*/
                    DataSource dataSource  = new DruidDataSource();
                    //3.设置属性
                    DruidDataSource ds = (DruidDataSource)dataSource;
                    ds.setUrl(pro.getProperty("jdbcUrl"));
                    ds.setUsername(pro.getProperty("username"));
                    ds.setPassword(pro.getProperty("password"));
                    ds.setInitialSize(new Integer(pro.getProperty("initialSize")));
                    ds.setMaxActive(new Integer(pro.getProperty("maxActive")));
                    ds.setMinIdle(new Integer(pro.getProperty("minIdle")));
                    ds.setMaxWait(new Long(pro.getProperty("maxWait")));
                    //4.拿连接。直接通过数据源获取可用的连接
                    Connection conn = ds.getConnection();
                    //System.out.println(conn);//检验是否能够成功拿到一个数据库连接池中的连接
    
            //2.编写sql语句
            String sql = "INSERT INTO test1 VALUES (NULL,\"张四丰\")";
            //3.PreparedStatement
            PreparedStatement pst = conn.prepareStatement(sql);
            //4.执行sql
            pst.executeUpdate();
    
            //5.直接关闭资源即可,
            conn.close();
            pst.close();
        }
    }
    

4.关闭资源与归还至连接池的一点说明

关于第5步的直接关闭资源。事实上,数据源返回的连接和我们使用DriverManager获得连接是不同的,理论上说数据源返回的连接应该是我们自己通过DriverManager获取的练级的代理对象,代理对象修改了原生对象的一部分功能,特别是close方法。

代理Cnnection的close方法实际操作是:首先判断池中是否有过多的空闲连接,如果超过了最大的空闲连接数,close会自动关闭连接,并且将这个连接对象从池中排除。

如果池中的空闲连接数量并不大于最大空闲连接数量,就不会关闭连接,二十标记为空闲状态,几乎所有的连接池都是这样的。


JDBC系列(九):JDBC与数据库连接池(Druid-德鲁伊)使用步骤_第1张图片

你可能感兴趣的:(JDBC)