zoukankan      html  css  js  c++  java
  • c3p0(数据库连接池)私人学习笔记

    俗话说“好记性不如烂笔头”,编程的海洋如此的浩大,养成做笔记的习惯是成功的一步!


    此笔记主要是c3p0-0.9.1.2版本的笔记,并且笔记都是博主自己一字一字编写和记录,有错误的地方欢迎大家指正。




    c3p0数据库池技术,Spring框架就是默认使用此数据库池技术。必须引入jar包:c3p0-0.9.1.2.jar。


    1、使用方式一直接ComboPooledDataSource cbds = new ComboPooledDataSource();然后设置相应参数再获取Connection对象。(不推荐)

    2、使用Properties配置文件,类似dbcp。

    3、使用xml文件。也是使用ComboPooledDataSource cbds = new ComboPooledDataSource();不要再额外配置信息,直接就可以获取Connection对象。

    4、使用连接池后,当获取Connection对象时,获取的不是原对象而是代理对象,Connection的close()方法也经过重写,
    因此,Connection直接调用close()方法会被连接池收回资源,而并不是真正关闭Connection的链接。在使用时,应当手动调用close()方法,
    可以加快连接池的回收,否则影响性能和效率。


    xml文件路径跟名字已经固定(必须在src目录下建立c3p0-config.xml),default是使用的默认配置,jnb是指定使用的配置:

    <c3p0-config>
        <!-- 默认配置的数据源 -->
    <default-config>
       <!-- 指定数据库的驱动 -->
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <!-- 指定数据库的连接URL -->
    <property name="jdbcUrl">jdbc:mysql:///books20131012</property>  (如果不简写则是jdbc:mysql://localhost:3306/books20131012)
    <!-- 指定连接的用户和密码 -->
    <property name="user">root</property>
    <property name="password">root</property>
    <!-- 指定每次增长的连接数目 -->
    <property name="acquireIncrement">5</property>
    <!-- 指定初始化连接池中的连接数  -->
    <property name="initialPoolSize">10</property>
    <!-- 指定连接池中的最小连接数  -->
    <property name="minPoolSize">5</property>
    <!-- 指定连接池中的最大连接数 -->
    <property name="maxPoolSize">20</property>
    <!--最大空闲时间,单位为秒。1800秒内未使用则连接被丢弃,若为0则永不丢弃。Default: 0 -->
    <property name="maxIdleTime" value="1800"></property>
    </default-config>

      <!-- 指定名字的配置方式 -->
    <named-config name="jnb"> 
       <!-- 指定数据库的驱动 -->
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <!-- 指定数据库的连接URL -->
    <property name="jdbcUrl">jdbc:mysql:///books20131012</property>
    <!-- 指定连接的用户和密码 -->
    <property name="user">root</property>
    <property name="password">root</property>
    <!-- 指定每次增长的连接数目 -->
    <property name="acquireIncrement">5</property>
    <!-- 指定初始化连接池中的连接数  -->
    <property name="initialPoolSize">10</property>
    <!-- 指定连接池中的最小连接数  -->
    <property name="minPoolSize">5</property>
    <!-- 指定连接池中的最大连接数 -->
    <property name="maxPoolSize">20</property>
    <!--最大空闲时间,单位为秒。1800秒内未使用则连接被丢弃,若为0则永不丢弃。Default: 0 -->
    <property name="maxIdleTime" value="1800"></property>
    </named-config>
    </c3p0-config>



    使用代码示例:

    package cn.itcast.c3p0;
    
    import java.beans.PropertyVetoException;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    /**
     * 该类主要对C3P0进行学习
     * 
     * @author NingBoJiao
     * 
     */
    public class C3P0Test {
    	//使用的是xml配置文件来获取参数。推荐使用此方法。
    	private static void test2() throws PropertyVetoException, SQLException {
    		ComboPooledDataSource cbds = new ComboPooledDataSource("jnb");
    
    		Connection conn = cbds.getConnection();
    		String sql = "insert into accounts (name) values ('c3p0 哈哈2')";
    		PreparedStatement state = conn.prepareStatement(sql);
    		state.execute();
    
    		state.close();
    		conn.close();
    	}
    	
    	
    	//使用的是硬编码方式,不推荐此方法。
    	private static void test1() throws PropertyVetoException, SQLException {
    		ComboPooledDataSource cbds = new ComboPooledDataSource();
    		cbds.setDriverClass("com.mysql.jdbc.Driver");
    		cbds.setJdbcUrl("jdbc:mysql:///personsystem");
    		cbds.setUser("root");
    		cbds.setPassword("root");
    
    		cbds.setInitialPoolSize(5);
    		cbds.setMaxPoolSize(10);
    		cbds.setMaxIdleTime(2);
    		cbds.setAcquireIncrement(5);
    
    		Connection conn = cbds.getConnection();
    		String sql = "insert into accounts (name) values ('c3p0')";
    		PreparedStatement state = conn.prepareStatement(sql);
    		state.execute();
    
    		state.close();
    		conn.close();
    	}
    
    }
    


  • 相关阅读:
    cors允许的方法和contype-type
    解决Ubuntu 18.04中文输入法的问题
    "Visual Studio Code is unable to watch for file changes in this large workspace"
    设置spacevim字体显示乱码问题
    python3.6 +tkinter GUI编程 实现界面化的文本处理工具
    Python3.6的组件numpy的安装
    LinQ实战学习笔记(四) LINQ to Object, 常用查询操作符
    SharpGL学习笔记(十九) 摄像机漫游
    SharpGL学习笔记(十八) 解析3ds模型并显示
    SharpGL学习笔记(十七) 立体文字和平面文字
  • 原文地址:https://www.cnblogs.com/catgwj/p/7503306.html
Copyright © 2011-2022 走看看