• 03016_DBCP连接池


    1、连接池概述

      (1)用池来管理Connection,这样可以重复使用Connection;

      (2)有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象;

      (3)当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了;

      (4)Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池;

      (5)常见的连接池:DBCP、C3P0。

    2、DBCP连接池

      (1)DBCP也是一个开源的连接池,是Apache Common成员之一,在企业开发中也比较常见,tomcat内置的连接池;

      (2)下载并导入commons-dbcp-1.4.jar和commons-pool-1.5.6.jar包,下载链接commons-dbcp-1.4.jar和commons-pool-1.5.6.jar 密码:q81g ;

      (3)编写工具类

        ①连接数据库表的工具类, 采用DBCP连接池的方式来完成,Java中提供了一个连接池的规则接口:

        DataSource : 它是java中提供的连接池,作为 DriverManager 工具的替代项。在DBCP包中提供了DataSource接口的实现类,我们要用的具体的连接池 BasicDataSource类。

     1 import javax.sql.DataSource;
     2 
     3 import org.apache.commons.dbcp.BasicDataSource;
     4 
     5 public class JDBCUtils {
     6     public static final String DRIVER = "com.mysql.jdbc.Driver";
     7     public static final String URL = "jdbc:mysql://localhost:3306/mybase";
     8     public static final String USERNAME = "root";
     9     public static final String PASSWORD = "root";
    10     /*
    11      * 创建连接池BasicDataSource
    12      */
    13     public static BasicDataSource dataSource = new BasicDataSource();
    14     // 静态代码块
    15     static {
    16         // 对连接池对象 进行基本的配置
    17         dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动
    18         dataSource.setUrl(URL); // 指定要连接的数据库地址
    19         dataSource.setUsername(USERNAME); // 指定要连接数据的用户名
    20         dataSource.setPassword(PASSWORD); // 指定要连接数据的密码
    21     }
    22 
    23     /*
    24      * 返回连接池对象
    25      */
    26     public static DataSource getDataSource() {
    27         return dataSource;
    28     }
    29 }

      (4)增

      初始数据:

      

     1 import java.sql.SQLException;
     2 
     3 import org.apache.commons.dbutils.QueryRunner; 5 import org.junit.Test;
     6 
     7 /*
     8  * 演示使用DBUtils工具  完成数据库表的增删改查
     9  */
    10 public class Demo {
    11     // 插入功能
    12     @Test
    13     public void insert() {
    14         try {
    15             // 获取一个用来执行SQL语句的对象 QueryRunner
    16             QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
    17             String sql = "INSERT INTO Sort(sname) VALUES(?)";
    18             Object[] params = { "遥控器" };
    19             int line = qr.update(sql, params);
    20             // 结果集处理
    21             System.out.println("line = " + line);
    22 
    23         } catch (SQLException e) {
    24             throw new RuntimeException(e);
    25         }
    26     }
    27 
    28 }

      运行结果:

      

      (5)删

     1 import java.sql.SQLException;
     2 
     3 import org.apache.commons.dbutils.QueryRunner;
     4 import org.junit.Test;
     5 
     6 /*
     7  * 演示使用DBUtils工具  完成数据库表的增删改查
     8  */
     9 public class Demo {
    10     // 删除功能
    11     @Test
    12     public void delete() {
    13         try {
    14             // 创建一个QueryRunner对象,用来完成SQL语句的执行
    15             QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
    16             // 执行SQL语句
    17             String sql = "DELETE FROM Sort WHERE sid = ?";
    18             Object[] params = { 7 };
    19             int line = qr.update(sql, params);
    20             // 结果集的处理
    21             System.out.println("line=" + line);
    22 
    23         } catch (SQLException e) {
    24             throw new RuntimeException(e);
    25         }
    26     }
    27 
    28 }

      运行结果:
      

      (6)改

     1 import java.sql.SQLException;
     2 
     3 import org.apache.commons.dbutils.QueryRunner;
     4 import org.junit.Test;
     5 
     6 /*
     7  * 演示使用DBUtils工具  完成数据库表的增删改查
     8  */
     9 public class Demo {
    10     // 更新功能
    11     @Test
    12     public void update() {
    13         try {
    14             // 创建一个QueryRunner对象,用来完成SQL语句的执行
    15             QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
    16             // 执行SQL语句
    17             String sql = "UPDATE Sort SET sid = sid+2 WHERE sname=?";
    18             Object[] params = { "遥控器" };
    19             int line = qr.update(sql, params);
    20             // 结果集的处理
    21             System.out.println("line=" + line);
    22 
    23         } catch (SQLException e) {
    24             throw new RuntimeException(e);
    25         }
    26     }
    27 
    28 }

      运行结果:

      

      (7)查

     1 import java.sql.SQLException;
     2 
     3 import org.apache.commons.dbutils.QueryRunner;
     4 import org.apache.commons.dbutils.handlers.BeanHandler;
     5 import org.junit.Test;
     6 
     7 /*
     8  * 演示使用DBUtils工具  完成数据库表的增删改查
     9  */
    10 public class Demo {
    11     // 查询功能,将结果集中第一条记录封装到一个指定的javaBean中。
    12     @Test
    13     public void search() {
    14         try {
    15             // 获取QueryRunner
    16             QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
    17             // 执行SQL语句
    18             String sql = "SELECT * FROM sort";
    19             Object[] params = {};
    20             Sort p = qr.query(sql, new BeanHandler<Sort>(Sort.class), params);
    21             // 结果集处理
    22             System.out.println(p);
    23 
    24         } catch (SQLException e) {
    25             throw new RuntimeException(e);
    26         }
    27     }
    28 
    29 }

      运行结果:

      

      (8)常见配置项

      

      参考文档链接:参考文档

  • 相关阅读:
    【Netty之旅四】你一定看得懂的Netty客户端启动源码分析!
    Netty之旅三:Netty服务端启动源码分析,一梭子带走!
    【原创】经验分享:一个Content-Length引发的血案(almost....)
    Netty之旅二:口口相传的高性能Netty到底是什么?
    Java解压和压缩带密码的zip文件过程详解
    SQLServer安装教程(史上最详细版本)
    26.Vue技术栈开发实战-项目部署
    25.Vue技术栈开发实战-多Tab页开发
    6-6 创建产品卡片组件(1)
    6-5 创建垂直网格组件
  • 原文地址:https://www.cnblogs.com/gzdlh/p/8120045.html
Copyright © 2020-2023  润新知