• JDBC 学习复习8 C3P0数据源使用


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

    c3p0与dbcp区别

    • dbcp没有自动回收空闲连接的功能
    • c3p0有自动回收空闲连接功能

    导入相关jar包
     c3p0-0.9.2-pre1.jar、mchange-commons-0.2.jar,如果操作的是Oracle数据库,那么还需要导入c3p0-oracle-thin-extras-0.9.2-pre1.jar
    在类目录下加入C3P0的配置文件:c3p0-config.xml
    c3p0-config.xml的配置信息如下:
    配置了3个 一个默认和 的是 msyql 的,还要一个oracle 有需自取 改下配置就可以了

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
    c3p0-config.xml必须位于类路径下面
    private static ComboPooledDataSource ds;
    static{
        try {
            ds = new ComboPooledDataSource("MySQL");
        } catch (Exception e) {
            throw new ExceptionInInitializerError(e);
        }
    }
    -->
    
    <c3p0-config>
        <!--
        C3P0的缺省(默认)配置,
        如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource();”这样写就表示使用的是C3P0的缺省(默认)配置信息来创建数据源
        -->
        <default-config>
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/lieweb</property>
            <property name="user">root</property>
            <property name="password"></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("Oracle");”这样写就表示使用的是name是MySQL的配置信息来创建数据源
        -->
        <named-config name="Oracle">
            <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
            <property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:orcl</property>
            <property name="user">scott</property>
            <property name="password">tiger</property>
            
            <property name="acquireIncrement">5</property>
            <property name="initialPoolSize">10</property>
            <property name="minPoolSize">5</property>
            <property name="maxPoolSize">20</property>
        </named-config>
        
         <!--
        C3P0的命名配置,
        如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource("MySQL");”这样写就表示使用的是name是MySQL的配置信息来创建数据源
        -->
        <named-config name="MySQL">
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/libweb</property>
            <property name="user">root</property>
            <property name="password"></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>
    

    使用C3P0的数据库 工具类代码如下

    package dbex;
    
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class DBUtil3 {
    	
    	private static ComboPooledDataSource ds = null;
    	static{
    		try {
    			
    			 //通过代码创建C3P0数据库连接池
                /*ds = new ComboPooledDataSource();
                ds.setDriverClass("com.mysql.jdbc.Driver");
                ds.setJdbcUrl("jdbc:mysql://localhost:3306/libweb");
                ds.setUser("root");
                ds.setPassword("");
                ds.setInitialPoolSize(10);
                ds.setMinPoolSize(5);
                ds.setMaxPoolSize(20);*/
    			//通过读取C3P0的xml配置文件创建数据源,C3P0的xml配置文件c3p0-config.xml必须放在src目录下
    			
    			ds = new ComboPooledDataSource("MySQL");
    			
    		} catch (Exception e) {
    			System.out.println(DBUtil3.class.toString()+":"+e.getMessage());
    			e.printStackTrace();
    		}
    	}
    	/**
    	 * 
    	 * @Title: geteConnection 
    	 * @Description: 获取数据库连接
    	 * @param @return
    	 * @param @throws SQLException    
    	 * @throws
    	 */
    	public static Connection getConnection() throws SQLException{
    		return ds.getConnection();
    	}
    	/**
    	 * 
    	 * @Title: release 
    	 * @Description:释放资源 
    	 * @param     
    	 * @throws
    	 */
    	public static void release(Connection conn,PreparedStatement ppst,ResultSet rs){
    		if(conn!=null){
    			try {
    				conn.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    		if(ppst!=null){
    			try {
    				ppst.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    		if(rs!=null){
    			try {
    				rs.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    	/**
    	 * @throws SQLException 
    	 * 
    	 * @Title: main 
    	 * @Description:最好写个 JUnit 测试类咯   @Test 的方式  可以参考我的博文 
    	 * @param @param args    
    	 * @throws
    	 */
    	 public static void main(String[] args) throws SQLException {
    		 Connection conn=null;
    			PreparedStatement ppst =null;
    			ResultSet rs= null;
    			
    			conn =DBUtil3.getConnection();
    			System.out.println(conn);
    			ppst = conn.prepareStatement("select * from user");
    			rs=ppst.executeQuery();
    			while(rs.next()){
    				System.out.println(rs.getInt(1)+"	"+rs.getString(2));
    			}
    			DBUtil3.release(conn, ppst, rs);
    		}
    }
    
    

    测试效果-mysql

    测试效果-oracle

  • 相关阅读:
    windows上docker部署springboot多实例
    oracle 如何搜索当前用户下所有表里含某个值的字段?
    VS2010/OpenGL配置
    (译)Minimal Shader(最小的着色器)
    (译)Cg Programming/Unity(Cg编程/Unity)
    (转)在Unity3D中控制动画播放
    Unity3d中使用assetbundle
    C# 操作 sqlite
    Unity3d网格合并
    在Unity3d中解析Lua脚本的方法
  • 原文地址:https://www.cnblogs.com/humi/p/7958041.html
Copyright © 2020-2023  润新知