zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【python学习笔记02】python的数据类型2
    元器件选型(一)ESD、TVS参考资料
    【python学习笔记01】python的数据类型
    你不知道的vue生命周期钩子选项(三)
    vue源码解析之选项合并(二)
    vue源码解析之选项合并(一)
    聊聊var与let 在window下面的区别(除开作用域)
    浅谈JavaScript中的防抖和节流
    Redhat6.4下安装Oracle10g
    Ubuntu Server 14.04 集成
  • 原文地址:https://www.cnblogs.com/humi/p/7958041.html
Copyright © 2011-2022 走看看