为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