数据库连接池与JDBC Template

数据库连接池与JDBC Template

数据库连接池

  1. 概念:存放数据库连接的容器。

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

    1. 特点:节约资源、访问高效

    2. 实现:

    3. 标准接口:DataSource javax.sql包下

      1. 方法:
      • 获取连接:getConnection()
      • 归还连接:如果连接对象Connection是从连接池中获取,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接
    4. 由数据库厂商实现

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

  • 步骤:

    1. 导入jar包;c3p0-0.9.5.5.jar & mchange-commons-java-0.2.19.jar & mysql-connector-java-8.0.23.jar

      下载地址:https://sourceforge.net/projects/c3p0/

    2. 定义配置文件:

      • 名称:c3p0.properties 或者 c3po-config.xml
      • 路径:直接将文件放在src目录下即可。
    3. 创建核心对象(数据库连接池对象)ComboPooledDataSource

    4. 获取连接:getConnection

public class c3p0demo2 {
      public static void main(String[] args) throws SQLException {
          //1、获取DataSource
          DataSource ds = new ComboPooledDataSource();//可添加参数进行指定名称配置
          //2、获取连接
          for (int i = 1; i < 11; i++) {
              Connection conn = ds.getConnection();
              System.out.println(i + " : " + conn );
          } 
      }
      /*public  void testNamedeConfig(){
          //1.1获取DataSource,使用指定名称配置
          DataSource ds = new ComboPooledDataSource("otherc3p0");
      }*/
  }
  1. Druid:数据库连接池技术,由阿里巴巴提供

    • 步骤:

      1. 导入jar包 druid - 1.0.9.jar & 数据库驱动jar包

      2. 定义配置文件:是properties形式,可以叫任意名称,可以放在任意目录下

      3. 加载配置文件:Properrties
        4. 获取数据库连接池对象:通过工厂类来获取DruidDataSourceFactory
        5. 获取连接

      public class DruidDemo1{
          public static void main(String[] args) throws Exception {
              //导入jar包
              //定义配置文件
              //加载配置文件
              Properties pro = new Properties();
              InputStream is = DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties");
              pro.load(is);
              //获取连接池对象
              DataSource ds = DruidDataSourceFactory.createDataSource(pro);
              //获取连接
              Connection conn = ds.getConnection();
              System.out.println(conn);
      
          }
      }
      
    • 定义工具类

      1. 定义一个JDBCUtils
      2. 提供静态代码块加载配置文件,初始化连接池对象
      3. 提供方法
        1. 获取连接方法:通过数据库连接池获取连接
        2. 释放资源
        3. 获取连接池的方法
      public class JDBCUtils {
          //1、定义成员变量DataSource
          private static DataSource ds;
      
          static{
              //1、加载配置文件
              Properties pro = new Properties();
              try {
                  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(ResultSet rs, 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();
                  }
              }
              if(rs != null ){
                  try {
                      rs.close();
                  } catch (SQLException e) {
                      e.printStackTrace();
                  }
              }
          }
          /*
          获取连接池方法
          * */
          public static DataSource getDataSource(){
              return ds;
          }
      }
      
      

      完整代码:

      public class DruidDemo2 {
          public static void main(String[] args) {
              /*
              * 完成添加操作 account表添加数据 一条记录
              * */
              Connection conn = null;
              PreparedStatement pstmt = null ;
              try {
                  //1、获取连接
                  conn = JDBCUtils.getConnection();
      //            2、定义SQL
                  String sql = "insert into account values (null,?,?)";
      //            3、获取pstmt对象
                  pstmt = conn.prepareStatement(sql);
      //            4、给?赋值
                  pstmt.setString(1,"王五");
                  pstmt.setDouble(2,1000);
      //            5、执行SQL
                  int count = pstmt.executeUpdate();
                  System.out.println(count);
              } catch (SQLException e) {
                  e.printStackTrace();
              }finally{
      //            6、释放资源
                  JDBCUtils.close(null,pstmt,conn);
              }
      
          }
      }
      

JDBC Template

Spring JDBC

  • Spring 框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发

  • 步骤:

    1. 导入jar包

    2. 创建JDBCTemplate对象。依赖于数据源DataSource

      • JdbcTemplate template = new JdbcTemplate(ds)
    3. 调用JdbcTemplate的方法来完成CRUD的操作

      • update():执行DML语句:增删改语句
      • queryForMap():查询结果将结果封装为map集合
      • queryForList():查询结果将结果封装为list集合
      • query():查询结果将结果封装为JavaBean集合
      • queryForObject():查询结果将结果封装为对象
      public class JdbcTemplateDemo1 {
          public static void main(String[] args) {
      //        1、导入jar包
      //        2、创建JDBCTemplate对象
              JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
      //        3、sql语句
              String sql = "update account set balance = 5000 where id = ?";
      //        4、调用方法
              int count = template.update(sql, 3);
              System.out.println(count);
          }
      }
      
      

      4、练习:

      • 需求:

        1. 修改1号数据的salary为10000

        2. 添加一条记录

        3. 删除刚才添加的记录

        4. 查询所有记录,将其封装为Map集合

        5. 查询所有记录,将其封装为List集合

        6. 查询所有记录,将其封装为Emp对象的List集合

        7. 查询总记录数

      4、练习:

      • 需求:

        1. 修改1号数据的salary为10000

        2. 添加一条记录

        3. 删除刚才添加的记录

        4. 查询所有记录,将其封装为Map集合

        5. 查询所有记录,将其封装为List集合

        6. 查询所有记录,将其封装为Emp对象的List集合

        7. 查询总记录数

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文D刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值