管理数据库连接和事务的工具类
2017-12-29 14:52
627 查看
import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; import com.mchange.v2.c3p0.DataSources; /** * 这个工具类就是来管理数据库连接和事务的 * * @author user * */ public class JDBCUtil { // 数据连接池对象 private static ComboPooledDataSource dataSource = new ComboPooledDataSource();; // 事务专用连接,把事务存入到ThreadLocal中 private static ThreadLocal<Connection> tlConn = new ThreadLocal<Connection>(); /** * 通过数据连接池获取连接 * * @throws SQLException */ public static Connection getConnection() throws SQLException { // 如果conn不为空,证明一件调用了beginTransaction方法,事务已经开启 Connection conn = tlConn.get(); if (conn != null) return conn; return dataSource.getConnection(); } /** * 获取数据连接池对象 */ public static DataSource getDataSource() { return dataSource; } /** * 开启事务 获取Connection,设置它的setAutoCommit(false) * * @throws SQLException */ public static void beginTransaction() throws SQLException { Connection conn = tlConn.get(); if (conn != null) { throw new SQLException("事务已经开启,不能重复开启事务!"); } // 给conn赋值 conn = getConnection(); // 把conn的事务设置为手动提交 conn.setAutoCommit(false); // 把连接存入到ThreadLocal中 tlConn.set(conn); } /** * 提交事务 * * @throws SQLException */ public static void commitTransaction() throws SQLException { Connection conn = tlConn.get(); if (conn == null) { throw new SQLException("还没有开启事务,不能提交!"); } // 提交事务 conn.commit(); // 把连接归还,并且赋值为NULL,是为了保证下次获取,不再是开始事务的连接 conn.close(); tlConn.remove(); } /** * 事务回滚 * * @throws SQLException */ public static void rollbackTransaction() throws SQLException { Connection conn = tlConn.get(); if (conn == null) { throw new SQLException("还没有开启事务,不能回滚!"); } conn.rollback(); conn.close(); tlConn.remove(); } /** * 释放连接 * * @throws SQLException */ public static void closeConnection(Connection connection) throws SQLException { // 判断参数连接是否为事务连接,是就不关闭,不是再关闭 // 如果conn为NULL,证明没有开启事务,那么就关闭参数的connection Connection conn = tlConn.get(); if (conn == null) { connection.close(); } else if (conn != connection) { // 如果conn不为NULL,但是与connection不是同一个连接,证明参数不是事务专用连接,那么也关闭connection connection.close(); } } }
相关文章推荐
- Spring事务管理与数据库连接
- 在Java中利用动态代理实现数据库连接与事务的自动管理
- WebSphere Application Server ND V7中如何处理容器管理的数据库事务中会话 Bean 的连接异常?
- web工作流管理系统开发之十 数据库连接及事务设定
- 事务管理最佳实践多余的话之一“每次请求,一次数据库连接,一次事务”是不是金科玉律?
- 【j2ee spring】7、spring与数据库的连接的操作事务管理
- 我项目使用的数据库连接管理、事务管理类(欢迎拍砖)
- 使用c3p0连接数据库、操作数据库和数据库的事务管理,基于mybatis框架
- 在Java中利用动态代理实现数据库连接与事务的自动管理
- jdbc数据库连接管理封装工具类,不同使用属性文件配置数据库连接信息(1)
- jdbc数据库连接管理封装工具类,不同使用属性文件配置数据库连接信息(2)
- jdbc数据库连接管理封装工具类,不同使用属性文件配置数据库连接信息(3)
- 连接数据库的工具类,实现数据的插入
- 设备管理,连接两个数据库,用的easygui
- Spring事务之二(JDBC连接数据库的四种方式)
- ArcEngine10.1 代码连结选择不同事务版本进行数据库连接
- 数据库连接工具类 数据库连接工具类——仅仅获得连接对象 ConnDB.java
- JDBC连接数据库_通过调用一个连接管理方法去创建连接
- CentOS下开启mysql远程连接,远程管理数据库
- java常用工具类之数据库连接类(可以连接多种数据库)