数据库连接池及Spring JDBC的简单使用


概念

其实就是一个容器(集合),存放数据库连接的容器。

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

实现

  1. 标准接口:javax.sql.DataSource

    方法:

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

    • C3P0
    • Druid

C3P0:数据库连接池技术

步骤

  1. 导入 jar 包c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar

    不要忘记导入数据库驱动 jar 包

  2. 定义配置文件:

    • 名称:c3p0.properties 或者 c3p0-config.xml

    • 路径:直接放置于 src 下即可

    • 示例:

      <c3p0-config>
        <!-- 使用默认的配置读取连接池对象 -->
        <default-config>
        	<!--  连接参数 -->
          <property name="driverClass">com.mysql.jdbc.Driver</property>
          <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
          <property name="user">root</property>
          <property name="password">root</property>
      
          <!-- 连接池参数 -->
          <property name="initialPoolSize">5</property>
          <property name="maxPoolSize">10</property>
          <property name="checkoutTimeout">3000</property>
        </default-config>
      
        <named-config name="otherc3p0">
          <!--  连接参数 -->
          <property name="driverClass">com.mysql.jdbc.Driver</property>
          <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
          <property name="user">root</property>
          <property name="password">root</property>
      
          <!-- 连接池参数 -->
          <property name="initialPoolSize">5</property>
          <property name="maxPoolSize">8</property>
          <property name="checkoutTimeout">1000</property>
        </named-config>
      </c3p0-config>
  3. 创建核心对象:数据库连接池对象ComboPooledDataSource

  4. 获取连接:getConnection()

Druid:由阿里巴巴提供的数据库连接池实现技术

步骤 :

  1. 导入 jar 包,druid-1.2.8.jar

  2. 定义配置文件

    • 是 properties 形式的

    • 可以叫任意名称,可放置于任意目录下

    • 示例:

      driverClassName=com.mysql.jdbc.Driver
      url=jdbc:mysql://localhost:3306/test
      username=root
      password=root
      # 初始化连接数
      initialSize=5
      # 最大连接数
      maxActive=10
      maxWait=3000
  3. 加载配置文件,Properties

  4. 获取数据库连接对象:通过工厂类来实现 DruidDataSourceFactory

  5. 获取连接:getConnection

    代码示例:

    // 加载配置文件
    Properties pro = new Properties();
    InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
    pro.load(is);
    // 获取连接池对象
    DataSource ds = DruidDataSourceFactory.createDataSource(pro);
    // 获取连接
    Connection conn = ds.getConnection();

定义工具类

  1. 定义一个类JDBCUtils

  2. 提供静态代码块加载配置文件,初始化连接池对象

  3. 提供方法

    • 获取连接方法:通过数据库连接池获取连接
    • 释放资源
    • 获取连接池方法
    public class JDBCUtils {
    
    		    //1.定义成员变量 DataSource
    		    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){
                    close(null,stmt,conn);
    		    }
        		public static void close(ResultSet rs , Statement stmt, Connection conn){
                      if(rs != null){
                                try {
                                    rs.close();
                                } catch (SQLException e) {
                                    e.printStackTrace();
                                }
                            }
                      if(stmt != null){
                            try {
                                stmt.close();
                            } catch (SQLException e) {
                                e.printStackTrace();
                            }
                        }
    
    		        if(conn != null){
    		            try {
    		                conn.close();//归还连接
    		            } catch (SQLException e) {
    		                e.printStackTrace();
    		            }
    		        }
    		    }
    
    		    /**
    		     * 获取连接池方法
    		     */
    		    public static DataSource getDataSource(){
    		        return  ds;
    		    }
    
    		}

文章作者: Wujiu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Wujiu !
  目录