qt mysql连接池连接对象释放_JDBC工具类,基于C3P0的数据库连接池,提供获取连接池、获取连接对象、释放资源和封装事务操作的方法...

/**

*

* JDBC工具类,基于C3P0数据库连接池的实现

*

* @author 周瑜

* @2018年5月7日 下午2:13:20

*/

public final class JDBCUtils {

/**

* 使用C3P0-config中默认配置,创建数据库连接池对象

*/

private static final DataSource dataSource = new ComboPooledDataSource();

/**

* 返回数据库连接池对象

*

* @return

*/

public static final DataSource getDataSource() {

return dataSource;

}

/**

* 定义一个ThreadLocal对象,用来保存当前线程的连接对象

*/

private static final ThreadLocal LOCAL = new ThreadLocal<>();

/**

* 返回数据库连接对象

*

* @throws SQLException

*/

public static final Connection getConnection() throws SQLException {

Connection conn = LOCAL.get();

if (conn == null) {

conn = dataSource.getConnection();

LOCAL.set(conn);

}

return conn;

}

/**

* 用于定义需要在事务中执行的逻辑代码

*

* @param :事务中业务逻辑执行完毕后要返回的数据的类型

* @author 周瑜

*/

public static interface TransactionHandler {

public T execute();

}

/**

* 处理事务操作

* @param handler

* @return

*/

public static final T executeTransaction(TransactionHandler handler) {

Connection conn = null;

T t = null;

try {

conn = JDBCUtils.getConnection();

conn.setAutoCommit(false);// 开启事务

// 执行需要在事务中执行的业务逻辑代码

t = handler.execute();

conn.commit();// 提交事务

} catch (Exception e) {

e.printStackTrace();

if (conn != null) {

try {

conn.rollback();// 回滚事务

} catch (SQLException e1) {

e1.printStackTrace();

}

}

} finally {

// 将连接对象从ThreadLocal中移除

LOCAL.remove();

}

return t;

}

/**

* 关闭并释放JDBC中资源对象

* @param closes

*/

public static final void release(AutoCloseable... closes) {

if(closes != null && closes.length > 0) {

for (AutoCloseable autoCloseable : closes) {

if(autoCloseable != null) {

try {

autoCloseable.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值