100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > JDBC工具类 基于C3P0的数据库连接池 提供获取连接池 获取连接对象 释放资源和封装

JDBC工具类 基于C3P0的数据库连接池 提供获取连接池 获取连接对象 释放资源和封装

时间:2020-07-21 01:02:23

相关推荐

JDBC工具类 基于C3P0的数据库连接池 提供获取连接池 获取连接对象 释放资源和封装

/**

*

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

*

* @author 周瑜

* @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<Connection> 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 <T>:事务中业务逻辑执行完毕后要返回的数据的类型

* @author 周瑜

*/

public static interface TransactionHandler<T> {

public T execute();

}

/**

* 处理事务操作

* @param handler

* @return

*/

public static final <T> T executeTransaction(TransactionHandler<T> handler) {

Connection conn = null;

T t = null;

try {

conn = JDBCUtils.getConnection();

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

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

t = handler.execute();

mit();// 提交事务

} 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();

}

}

}

}

}

}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。