zoukankan      html  css  js  c++  java
  • c3p0 连接池

    C3P0数据源

      C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。C3P0数据源在项目开发中使用得比较多。

      c3p0与dbcp区别
    1. dbcp没有自动回收空闲连接的功能
    2. c3p0有自动回收空闲连接功能

    创建c3p0-config.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- c3p0-config.xml必须位于类路径下面 -->
    
    <c3p0-config>
        <!-- C3P0的缺省(默认)配置, 如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource();”这样写就表示使用的是C3P0的缺省(默认)配置信息来创建数据源 -->
        <default-config>
            <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/testsvnb?useSSL=false&amp;serverTimezone=Hongkong&amp;characterEncoding=utf-8&amp;autoReconnect=true</property>
            <property name="user">root</property>
            <property name="password">123456</property>
    
            <property name="acquireIncrement">5</property>
            <property name="initialPoolSize">10</property>
            <property name="minPoolSize">5</property>
            <property name="maxPoolSize">20</property>
        </default-config>
    
        <!-- C3P0的命名配置, 如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource("MySQL");”这样写就表示使用的是name是MySQL的配置信息来创建数据源 -->
        <named-config name="MySQL">
            <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/testsvnb?useSSL=false&amp;serverTimezone=Hongkong&amp;characterEncoding=utf-8&amp;autoReconnect=true</property>
            <property name="user">root</property>
            <property name="password">123456</property>
    
            <property name="acquireIncrement">5</property>
            <property name="initialPoolSize">10</property>
            <property name="minPoolSize">5</property>
            <property name="maxPoolSize">20</property>
        </named-config>
    
    </c3p0-config>

    创建JdbcUtils_C3P0:

    package com.xc.jdbc.util;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import javax.sql.DataSource;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    /**
     * @ClassName: JdbcUtils_C3P0
     * @Description: 数据库连接工具类
     * @author: 孤傲苍狼
     * @date: 2014-10-4 下午6:04:36
     */
    public class JdbcUtils_C3P0 {
    
        private static ComboPooledDataSource ds = null;
        // 在静态代码块中创建数据库连接池
        static {
            try {
                // 通过代码创建C3P0数据库连接池
                // ds = new ComboPooledDataSource();
                // ds.setDriverClass("com.mysql.cj.jdbc.Driver");
                // ds.setJdbcUrl("jdbc:mysql://localhost:3306/testsvnb?useSSL=false&serverTimezone=Hongkong&characterEncoding=utf-8&autoReconnect=true");
                // ds.setUser("root");
                // ds.setPassword("123456");
                // ds.setInitialPoolSize(10);
                // ds.setMinPoolSize(5);
                // ds.setMaxPoolSize(20);
    
                // 通过读取C3P0的xml配置文件创建数据源,C3P0的xml配置文件c3p0-config.xml必须放在src目录下
                ds = new ComboPooledDataSource();// 使用C3P0的默认配置来创建数据源
                // ds = new ComboPooledDataSource("MySQL");// 使用C3P0的命名配置来创建数据源
    
            } catch (Exception e) {
                throw new ExceptionInInitializerError(e);
            }
        }
    
        /**
         * @Method: getConnection
         * @Description: 从数据源中获取数据库连接
         * @Anthor:孤傲苍狼
         * @return Connection
         * @throws SQLException
         */
        public static Connection getConnection() throws SQLException {
            // 从数据源中获取数据库连接
            return ds.getConnection();
        }
    
        /**
         * @Method: release
         * @Description: 释放资源, 释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
         * @Anthor:孤傲苍狼
         *
         * @param conn
         * @param st
         * @param rs
         */
        public static void release(Connection conn, Statement st, ResultSet rs) {
            if (rs != null) {
                try {
                    // 关闭存储查询结果的ResultSet对象
                    rs.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                rs = null;
            }
            if (st != null) {
                try {
                    // 关闭负责执行SQL命令的Statement对象
                    st.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
    
            if (conn != null) {
                try {
                    // 将Connection连接对象还给数据库连接池
                    conn.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * @Method: getDataSource
         * @Description: 获取数据源
         * @Anthor:孤傲苍狼
         * @return DataSource
         */
        public static DataSource getDataSource() {
            // 从数据源中获取数据库连接
            return ds;
        }
    
    }

    创建测试类DataSourceTest:

    package com.xc.jdbc.curd;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    import org.junit.Test;
    
    import com.xc.jdbc.util.JdbcUtils_C3P0;
    import com.xc.jdbc.util.JdbcUtils_DBCP;
    
    public class DataSourceTest {
    
        @Test
        public void c3p0DataSourceTest() {
            Connection conn = null;
            PreparedStatement st = null;
            ResultSet rs = null;
            try {
                // 获取数据库连接
                conn = JdbcUtils_C3P0.getConnection();
                String sql = "insert into test1(name) values(?)";
                st = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
                st.setString(1, "gacl");
                st.executeUpdate();
                // 获取数据库自动生成的主键
                rs = st.getGeneratedKeys();
                if (rs.next()) {
                    System.out.println(rs.getInt(1));
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // 释放资源
                JdbcUtils_C3P0.release(conn, st, rs);
            }
        }
    
    }

    参考文章:

    https://www.cnblogs.com/xdp-gacl/p/4002804.html

  • 相关阅读:
    windbg常用命令
    Windbg双机调试环境配置(Windows7/Windows XP+VirtualBox/VMware+WDK7600)
    SVN使用说明文档
    JavaScript-浏览器兼容之客户端检测
    JavaScript-执行环境
    JavaScript-函数
    JavaScript-静态私有变量
    JavaScript-构造函数模式
    JavaScript 自执行函数剖析
    easyui如何在datagrid 每行增加超链接
  • 原文地址:https://www.cnblogs.com/ooo0/p/10349883.html
Copyright © 2011-2022 走看看