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

    DBCP数据源

      DBCP 是 Apache 软件基金组织下的开源连接池实现

    导入maven包:

            <!-- dbcp连接池 -->
            <dependency>
                <groupId>commons-dbcp</groupId>
                <artifactId>commons-dbcp</artifactId>
                <version>1.4</version>
            </dependency>

    创建dbcpconfig.properties

    #Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。
    
    #连接设置
    driver=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://localhost:3306/testsvnb?useSSL=false&serverTimezone=Hongkong&characterEncoding=utf-8&autoReconnect=true
    username=root
    password=123456
    
    # 初始化连接
    initialSize=10
    #最大连接数量
    maxActive=50
    # 最大空闲连接
    maxIdle=20
    # 最小空闲连接
    minIdle=5
    # 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒
    maxWait=60000
    
    #JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] 
    #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
    connectionProperties=useUnicode=true;characterEncoding=UTF8
    
    #指定由连接池所创建的连接的自动提交(auto-commit)状态。
    defaultAutoCommit=true
    
    #driver default 指定由连接池所创建的连接的只读(read-only)状态。
    #如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
    defaultReadOnly=
    
    #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
    #可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
    defaultTransactionIsolation=READ_UNCOMMITTED

    创建JdbcUtils_DBCP :

    package com.xc.jdbc.util;
    
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    import javax.sql.DataSource;
    import org.apache.commons.dbcp.BasicDataSourceFactory;
    
    /**
     * @ClassName: JdbcUtils_DBCP
     * @Description: 数据库连接工具类*/
    public class JdbcUtils_DBCP {
        /**
         * 在java中,编写数据库连接池需实现java.sql.DataSource接口,每一种数据库连接池都是DataSource接口的实现 DBCP连接池就是java.sql.DataSource接口的一个具体实现
         */
        private static DataSource ds = null;
        // 在静态代码块中创建数据库连接池
        static {
            try {
                // 加载dbcpconfig.properties配置文件
                InputStream in = JdbcUtils_DBCP.class.getClassLoader().getResourceAsStream("db/dbcpconfig.properties");
                Properties prop = new Properties();
                prop.load(in);
                // 创建数据源
                ds = BasicDataSourceFactory.createDataSource(prop);
            } catch (Exception e) {
                throw new ExceptionInInitializerError(e);
            }
        }
    
        /**
         * @Method: getConnection
         * @Description: 从数据源中获取数据库连接
         * 
         * @return Connection
         * @throws SQLException
         */
        public static Connection getConnection() throws SQLException {
            // 从数据源中获取数据库连接
            return ds.getConnection();
        }
    
        /**
         * @Method: release
         * @Description: 释放资源, 释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
         *
         * @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: 获取数据源
         * 
         * @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 dbcpDataSourceTest() {
            Connection conn = null;
            PreparedStatement st = null;
            ResultSet rs = null;
            try {
                // 获取数据库连接
                conn = JdbcUtils_DBCP.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_DBCP.release(conn, st, rs);
            }
        }
    
    }

    参考文章:

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

    《精通Spring 4.x:企业应用开发实战》10.4.1章节

  • 相关阅读:
    C# 如何在PDF文档中创建表格
    C# 如何创建Excel多级分组
    C# 添加、修改以及删除Excel迷你图表的方法
    C# 创建EXCEL图表并保存为图片
    【BZOJ5287】[HNOI2018]毒瘤(动态规划,容斥)
    【BZOJ5250】[九省联考2018]秘密袭击(动态规划)
    【BZOJ5213】[ZJOI2018]迷宫(神仙题)
    CodeForces Global Round 1
    【BZOJ5212】[ZJOI2018]历史(Link-Cut Tree)
    【BZOJ5211】[ZJOI2018]线图(树哈希,动态规划)
  • 原文地址:https://www.cnblogs.com/ooo0/p/10349867.html
Copyright © 2011-2022 走看看