java sql 万能库_玩转JDBC打造数据库操作万能工具类JDBCUtil,加入了高效的数据库连接池,利用了参数绑定有效防止SQL注入...

package util;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import com.mchange.v2.c3p0.DataSources;

import java.beans.PropertyVetoException;

import java.io.FileInputStream;

import java.io.IOException;

import java.sql.Connection;

import java.sql.SQLException;

import java.util.Properties;/**

* 数据库连接对象

* Created by yuandl on 2016-12-16.*/

public classDBConnectionPool {private static volatileDBConnectionPool dbConnection;privateComboPooledDataSource cpds;/**

* 在构造函数初始化的时候获取数据库连接*/

privateDBConnectionPool() {try{/**通过属性文件获取数据库连接的参数值**/Properties properties= newProperties();

FileInputStream fileInputStream= new FileInputStream("src/config/jdbc-mysql.properties");

properties.load(fileInputStream);/**获取属性文件中的值**/String driverClassName= properties.getProperty("jdbc.driverClassName");

String url= properties.getProperty("jdbc.url");

String username= properties.getProperty("jdbc.username");

String password= properties.getProperty("jdbc.password");/**数据库连接池对象**/cpds= newComboPooledDataSource();/**设置数据库连接驱动**/cpds.setDriverClass(driverClassName);/**设置数据库连接地址**/cpds.setJdbcUrl(url);/**设置数据库连接用户名**/cpds.setUser(username);/**设置数据库连接密码**/cpds.setPassword(password);/**初始化时创建的连接数,应在minPoolSize与maxPoolSize之间取值.默认为3**/cpds.setInitialPoolSize(3);/**连接池中保留的最大连接数据.默认为15**/cpds.setMaxPoolSize(10);/**当连接池中的连接用完时,C3PO一次性创建新的连接数目;**/cpds.setAcquireIncrement(1);/**隔多少秒检查所有连接池中的空闲连接,默认为0表示不检查;**/cpds.setIdleConnectionTestPeriod(60);/**最大空闲时间,超过空闲时间的连接将被丢弃.为0或负数据则永不丢弃.默认为0;**/cpds.setMaxIdleTime(3000);/**因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的

时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable

等方法来提升连接测试的性能。Default: false**/cpds.setTestConnectionOnCheckout(true);/**如果设为true那么在取得连接的同时将校验连接的有效性。Default: false **/cpds.setTestConnectionOnCheckin(true);/**定义在从数据库获取新的连接失败后重复尝试获取的次数,默认为30;**/cpds.setAcquireRetryAttempts(30);/**两次连接中间隔时间默认为1000毫秒**/cpds.setAcquireRetryDelay(1000);/** 获取连接失败将会引起所有等待获取连接的线程异常,

但是数据源仍有效的保留,并在下次调用getConnection()的时候继续尝试获取连接.如果设为true,

那么尝试获取连接失败后该数据源将申明已经断开并永久关闭.默认为false**/cpds.setBreakAfterAcquireFailure(true);

}catch(IOException e) {

e.printStackTrace();

}catch(PropertyVetoException e) {

e.printStackTrace();

}

}/**

* 获取数据库连接对象,单例

*

* @return*/

public staticDBConnectionPool getInstance() {if (dbConnection == null) {

synchronized (DBConnectionPool.class) {if (dbConnection == null) {

dbConnection= newDBConnectionPool();

}

}

}returndbConnection;

}/**

* 获取数据库连接

*

* @return 数据库连接*/

publicfinal synchronized Connection getConnection() throws SQLException {returncpds.getConnection();

}/**

* finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。

*

* @throws Throwable*/

protected voidfinalize() throws Throwable {

DataSources.destroy(cpds);

super.finalize();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值