为java开发配置mysql的数据源(DateResource)和数据库连接(DBCP,C3P0)

注:mysql-connector-java-5.1.38-bin.jar(数据库驱动包)

一、DBCP

需要导入的jar包

1、commons-dbcp-1.2.2.jar

2、commons-pool.jar

配置数据库连接的.properties配置文件(默认放于src目录下)

 1 #连接设置
 2 driverClassName=com.mysql.jdbc.Driver
 3 url=jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf-8&useSSL=false
 4 username=root
 5 password=root
 6 
 7 #<!-- 初始化连接 -->
 8 initialSize=10
 9 
10 #最大连接数量
11 maxActive=50
12 
13 #<!-- 最大空闲连接 -->
14 maxIdle=20
15 
16 #<!-- 最小空闲连接 -->
17 minIdle=5
18 
19 #<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
20 maxWait=60000
21 
22 
23 #JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] 
24 #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
25 connectionProperties=useUnicode=true;characterEncoding=UTF8
26 
27 #指定由连接池所创建的连接的自动提交(auto-commit)状态。
28 defaultAutoCommit=true
29 
30 #driver default 指定由连接池所创建的连接的只读(read-only)状态。
31 #如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
32 defaultReadOnly=
33 
34 #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
35 #可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
36 defaultTransactionIsolation=READ_UNCOMMITTED

编写工具类JDBCUtil_DBCP.java

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;

public class JDBCUtil_DBCP {
    private static DataSource dataSource;
    static {
        //读取properties配置文件需要new一个Properties对象
        Properties properties = new Properties();
        //将配置文件读取到输入流
        InputStream in =Class.class.getResourceAsStream("/mysqldbcpconfig.properties");
        try {
            properties.load(in);
            //读取配置创建数据源datasource
            dataSource = BasicDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //提供获取datasource方法
    public static DataSource getDataSource() {
        return dataSource;
    }
    //直接获取连接
    public static Connection getConnection(){
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    //关闭各种连接和资源
    public static void closeConnection(Connection connection, Statement st, ResultSet rt){
        if(connection != null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(st != null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(rt != null){
            try {
                rt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

 

二、C3P0

需要导入的jar包

1、c3p0-0.9.2-pre1.jar

2、c3p0-oracle-thin-extras-0.9.2-pre1.jar

3、mchange-commons-0.2.jar

配置c3p0-config.xml(一定要放在src目录下,默认读取位置)

<?xml version="1.0" encoding="UTF-8"?>


<c3p0-config>
    <default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydatabase?useSSL=false</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>
        
        
    </default-config>
</c3p0-config>
jdbc:mysql://localhost:3306/mydatabase?useSSL=false
jdbc:mysql://localhost:3306/数据库名 useSSL=false
你的JDBC版本与MySQL版本不兼容,MySQL的版本更高一些,在连接语句后加上“useSSL=‘true’” ,就可以连接到数据库了。

工具类JDBCUtil_C3P0.java
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;
import com.mchange.v2.c3p0.DataSources;

public class JDBCUtil_C3P0 {
    private static ComboPooledDataSource dataSource;
    
    static {
        /*方法一:DataSources.unpooledDataSource()
         * try {
            DataSources dataSource = DataSources.unpooledDataSource();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        */
        /*
         * 方法二:ComboPooledDataSource()
         * */
        dataSource = new ComboPooledDataSource();
    }
    public static DataSource getDataSource(){
        return dataSource;
    }
    public static Connection getConnection(){
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static void closeConnection(Connection connection, Statement st, ResultSet rt){
        if(connection != null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(st != null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(rt != null){
            try {
                rt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

C3P0获取DataResouce不能传配置文件路径因此xml应放默认位置,或许有其它获取数据源的方法

Over