Durid,JdbcTemplate

数据库连接池

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

  2. 好处:

    • 节约资源
    • 用户访问高效
  3. 实现:标准接口:javax.sql.DataSource

    • 获取连接:getConnection()
    • 归还连接:如果连接对象Connection是从连接池中获取的,那么调用Connection对象.close(),不会关闭,而是归还
  4. 数据库

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

    • 步骤
      1. 导入jar包:c3p0-0.9.5.5.jar mchange-commons-java-0.2.19.jar
      2. 定义配置文件:
        • 名称 :c3p0.properties 或者 c3p0-config.xml
        • 路径: 直接放在src目录下即可
      3. 创建核心对象:数据库连接池对象 ComboPooledDataSource
      4. 获取连接:getConnection()
  6. Druid:数据库连接池实现技术,阿里巴巴提供

    • 步骤

      1. 导入jar:druid-1.2.6.jar(https://repo1.maven.org/maven2/com/alibaba/druid/druid-wrapper/)
      2. 定义配置文件:.properties
      3. 获取数据库连接池对象:通过工厂来获取 DruidDataSourceFactory
      4. 获取连接:getConnection()
    • druid.properties

      driverClassName = com.mysql.jdbc.Driver
      url = jdbc:mysql://localhost:3306/InternetBar
      username = root
      password = 123456
      #初始化连接数量
      initialSize = 5
      maxActive = 10
      #最大等待时间
      maxWait = 3000
      
    • DruidDemo

      package druid;
      
      import com.alibaba.druid.pool.DruidDataSourceFactory;
      
      import javax.sql.DataSource;
      import java.io.InputStream;
      import java.sql.Connection;
      import java.util.Properties;
      
      public class DruidDemo {
          public static void main(String[] args) throws Exception {
              //1.导入jar包
              //2.定义配置文件
              //3.加载配置文件
              Properties pro = new Properties();
              InputStream is =DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
              pro.load(is);
              //4.获取连接池对象
              DataSource ds = DruidDataSourceFactory.createDataSource(pro);
              //5.打印连接对象
              Connection con = ds.getConnection();
              System.out.println(con);
      
          }
      }
      
    • 定义工具类 JDBCUtils

      1. 定义一个类 JDBCUtils
      2. 提供静态代码加载配置文件,初始化连接池对象
      3. 提供方法
        1. 获取连接方法:通过数据库连接池获取连接
        2. 释放资源
        3. 获取连接池的方法
    • JDBCUtils.java

      package utils;
      
      import com.alibaba.druid.pool.DruidDataSourceFactory;
      
      import javax.sql.DataSource;
      import java.io.IOException;
      import java.sql.Connection;
      import java.sql.ResultSet;
      import java.sql.SQLException;
      import java.sql.Statement;
      import java.util.Properties;
      
      public class JDBCUtils {
      
          //1.定义一个成员变量
          private static DataSource ds;
      
          static {
              try { //1.加载配置文件
                  Properties pro = new Properties();
                  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(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();
                  }
              }
          }
      
          public static void close(ResultSet rs,Statement stmt, Connection conn){
              close(null,stmt,conn);
          }
      
          /**
           *获取连接池的方法
           */
          public static DataSource getDataSource(){
              return ds;
          }
      
      }
      
    • DruidDemo2.java

      package druid;
      
      import utils.JDBCUtils;
      
      import javax.xml.transform.Result;
      import java.sql.Connection;
      import java.sql.PreparedStatement;
      import java.sql.ResultSet;
      import java.sql.SQLException;
      
      public class DruidDemo2 {
      
          public static void main(String[] args) {
              /**
               * 完成一个查询操作
               */
              Connection con = null;
              PreparedStatement pstmt = null;
              ResultSet rs = null;
      
              try {
                  //1.获取连接
                  con = JDBCUtils.getConnection();
      
                  //定义Sql
                  String sql = "select * from user;";
      
                  //获取pstmt对象
                  pstmt = con.prepareStatement(sql);
      
                  rs= pstmt.executeQuery();
                  while(rs.next()){
                      System.out.println(rs.getInt("id"));
                      System.out.println(rs.getString("name"));
                      System.out.println(rs.getString("password"));
                      System.out.println(rs.getFloat("balance"));
                  }
      
              } catch (SQLException e) {
                  e.printStackTrace();
              } finally {
                  JDBCUtils.close(pstmt,con);
              }
      
          }
      }
      

spring JDBC

  1. 导入jar包

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

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

    • update():执行DML语句。增删改语句。

    • queryForMap():查询结果,将结果封装成Map集合

    • queryForList():查询结果,将结果封装成List集合

    • query():查询结果,将结果封装成Javabean对象

    • queryForObject():查询结果,将结果封装成对象

    • package jdbctemplate;
      
      import org.springframework.jdbc.core.JdbcTemplate;
      import utils.JDBCUtils;
      
      public class JdbcTemplatDemo {
      
          public static void main(String[] args) {
              //1.导入jar包
              //2.创建JDBCTemplate
              JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
      
              //3.调用方法,修改数据
              String sql = "update user set balance = 55.5 where id = ?";
              int count = template.update(sql, 234);
              System.out.println(count);
          }
      }
      

猜你喜欢

转载自blog.csdn.net/KAKA151515/article/details/116862482
今日推荐