jdbc高级自定义连接池与自定义jdbc框架

JDBC高级

JDBC连接池的使用

  • 数据库连接池的概念

    • 数据库的连接是一种关键有限的资源,在java程序与数据库获得连接的时候特别的消耗资源,所以创建一个数据库连接池对数据库与程序的连接进行统一管理 ,重复利用连接。
  • 第三方开源连接池

    • c3p0连接池

      • 配置文件名必须为:c3p0-config.xml或者c3p0-config.properties
      • 配置文件必须处于src文件的下面
    • 基本使用

    • 配置文件

      <c3p0-config>
        
        <default-config>
        	
          <property name="driverClass">com.mysql.jdbc.Driverproperty>
          <property name="jdbcUrl">jdbc:mysql://localhost/day05property>
          <property name="user">rootproperty>
          <property name="password">rootproperty>
          
          
          <property name="initialPoolSize">5property>
          <property name="maxPoolSize">1000property>
          <property name="checkoutTimeout">3000property>
        default-config>
      
        <named-config name="otherc3p0"> 
          
          <property name="driverClass">com.mysql.jdbc.Driverproperty>
          <property name="jdbcUrl">jdbc:mysql://localhost:3306/db15property>
          <property name="user">rootproperty>
          <property name="password">itheimaproperty>
          
          
          <property name="initialPoolSize">5property>
          <property name="maxPoolSize">8property>
          <property name="checkoutTimeout">1000property>
        named-config>
      c3p0-config>
      
      package com.wx.c3p0;
      import com.mchange.v2.c3p0.ComboPooledDataSource;
      import java.sql.Connection;
      import java.sql.SQLException;
      public class C3P0Test {
          public static void main(String[] args) {
              //创建连接池对象
              ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
              try {
                  //获得连接
                  Connection connection = comboPooledDataSource.getConnection();
              } catch (SQLException e) {
                  e.printStackTrace();
              }
          }
      }
      
    • druid连接池

      • 是阿里巴巴开发的一款开源的数据库连接池软件

      • 需要创建配置文件并且手动加载配置文件

      • 配置文件:properties配置

      • properties配置:

        url=jdbc:mysql://localhost:3306/exercise
        username=root
        password=root
        driverClassName=com.mysql.jdbc.Driver
        # 初始连接数
        initialSize=6
        # 最大连接数
        maxActive=10
        #超时等待时间
        maxWait=10000
        
      • druid连接池的使用

        public static void main(String[] args) throws Exception {
                //加载配置文件
                InputStream config = DruidConnectionPoolTest.class.getResourceAsStream("/druid.properties");
                System.out.println(config);
                Properties properties = new Properties();
                properties.load(config);
                //创建连接对象
                DataSource connectionPool = DruidDataSourceFactory.createDataSource(properties);
                System.out.println(connectionPool.getConnection());
            }
        
    • 连接池工具类

      /**
       * 数据库连接池工具类
       */
      public class ConnectionUtils {
          //私有化构造方法
          private ConnectionUtils() {
          }
      
          ;
          //声名数据源变量
          private static DataSource dataSource;
          private static Properties properties;
      
          //提供静态代码块加载配置文件
          static {
              InputStream resourceAsStream = ConnectionUtils.class.getClassLoader().getResourceAsStream("druid.properties");
              properties = new Properties();
              try {
                  properties.load(resourceAsStream);
                  dataSource = DruidDataSourceFactory.createDataSource(properties);
              } catch (IOException e) {
                  e.printStackTrace();
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      
          //提供一个获得数据库连接对象的方法
          public static Connection getConnection() {
              Connection con = null;
              try {
                  con = dataSource.getConnection();
              } catch (SQLException e) {
                  e.printStackTrace();
              }
              return con;
          }
      
          // 关闭资源
          public static void close(Connection con, ResultSet rs, Statement st) {
      
              if (con != null) {
                  try {
                      con.close();
                  } catch (SQLException e) {
                      e.printStackTrace();
                  }
              }
              if (rs != null) {
                  try {
                      rs.close();
                  } catch (SQLException e) {
                      e.printStackTrace();
                  }
              }
              if (st != null) {
                  try {
                      st.close();
                  } catch (SQLException e) {
                      e.printStackTrace();
                  }
              }
          }
      }
      

自定义JDBC连接池

  • java官方提供了一个数据库连接池的规范(DataSource接口)
  • 自定义连接池就是对DataSource接口进行实现
  • 核心功能getConnection
  • 实现连接的重复 使用
  • 实现思路:
    • 定义静态代码快获得指定数量的连接
    • 定义集合保存连接
    • 归还连接功能的实现:(继承,代理,装饰者设计模式,适配器设计模式 )

自定义JDBC框架

  • 在使用jdbc的时候大部分的代码都是相同只是sql的语句的不同,可以对这些代码进行封装为一个工具类这就是一个简单的jdbc的 框架
  • 源信息表示数据的结构信息
  • 数据库的源信息
    • 获得参数源信息:ParameterMetaData
    • 获取预编译对象的每个参数的相关信息
      • 获得预编译对象的参数个数:getParameterCount()
    • 获得结果集的源信息
  • 编写自定义框架的update方法思路:
    1. 方法传递的参数是sql语句与执行sql参数
    2. 对传递的sql语句进行预编译
    3. 判断sql语句需要的参数与传递的参数个数 是否相同,如果不相同就报错
    4. 如果相同就 替换占位符执行sql语句返回影响结果
  • 封装查询方法
    • 对于sql语句的查询结果有多种
      1. 查询结果是一个标量
      2. 查询结果是一行
      3. 查询结果是多行
    • 定义一个接口对返回的结果集进行处理方法
    • 策略模式
      • 实现了查询结果与对结果的处理的解耦

你可能感兴趣的:(数据库,java)