使用c3p0 对事务的处理

创建类 TxQueryRunner 继承 QueryRunner 重写其参数不带Connection的方法

需要jar包 :c3p0-0.9.1.2.jar、mysql-connector-java-5.1.20-bin.jar、commons-dbutils-1.6.jar

 1 package com.javaweb.jdbc;
 2
 3 import java.sql.Connection;
 4 import java.sql.SQLException;
 5
 6 import org.apache.commons.dbutils.QueryRunner;
 7 import org.apache.commons.dbutils.ResultSetHandler;
 8 /**
 9  * TxQueryRunner  需要处理事务时 使用该方法
10  * @author Administrator
11  *
12  */
13 public class TxQueryRunner extends QueryRunner {
14
15     @Override
16     public int[] batch(String sql, Object[][] params) throws SQLException {
17         Connection con = JdbcUtil.getConnection();
18         int[] result = super.batch(con, sql, params);
19         JdbcUtil.releaseConnection(con);
20         return result;
21     }
22
23     @Override
24     public <T> T query(String sql, ResultSetHandler<T> rsh, Object... params)
25             throws SQLException {
26         Connection con = JdbcUtil.getConnection();
27         T result =  super.query(con, sql, rsh, params);
28         JdbcUtil.releaseConnection(con);
29         return result;
30     }
31
32     @Override
33     public <T> T query(String sql, ResultSetHandler<T> rsh) throws SQLException {
34         Connection con = JdbcUtil.getConnection();
35         T result =  super.query(con, sql, rsh);
36         JdbcUtil.releaseConnection(con);
37         return result;
38     }
39
40     @Override
41     public int update(String sql, Object... params) throws SQLException {
42         Connection con = JdbcUtil.getConnection();
43         int result =  super.update(con, sql, params);
44         JdbcUtil.releaseConnection(con);
45         return result;
46     }
47
48     @Override
49     public int update(String sql, Object param) throws SQLException {
50         Connection con = JdbcUtil.getConnection();
51         int result = super.update(con, sql, param);
52         JdbcUtil.releaseConnection(con);
53         return result;
54     }
55
56     @Override
57     public int update(String sql) throws SQLException {
58         Connection con = JdbcUtil.getConnection();
59         int result = super.update(con, sql);
60         JdbcUtil.releaseConnection(con);
61         return result;
62     }
63
64 }

测试代码:

 1 @Test
 2     public void add2() throws SQLException{
 3         try{
 4             JdbcUtil.beginTransaction();// 开始事务
 5             QueryRunner qr = new TxQueryRunner();
 6             String sql = "insert into user values(null,?,?)";
 7             Object[] params = {"赵六1","123456"};
 8             qr.update(sql, params);
 9             if(false){
10                 throw new RuntimeException();
11             }
12             params = new Object[]{"王五1","123456"};
13             qr.update(sql, params);
14             JdbcUtil.commitTransaction();// 提交事务
15         }catch(Exception e){
16             JdbcUtil.rollbackTransaction();// 事务回滚
17         }
18         
时间: 2024-10-18 05:50:17

使用c3p0 对事务的处理的相关文章

JDBC&amp;&amp;c3p0、事务、批处理、多线程 于一体的经典秘方QueryRunner (common-dbutils)

目录: 基础篇_功能各自回顾 JDBC基础代码回顾(使用JdbcUtils工具简化) c3p0数据库连接池的使用(使用JdbcUtils工具简化) 大数据的插入(使用c3p0+JdbcUtils工具简化) 批处理操作(使用c3p0+JdbcUtils工具简化) 数据库中的事务处理(使用c3p0+JdbcUtils工具简化) 多线程的并发控制 进阶篇_迈向标准开发        自己编写dbutils工具( QueryRunner .TxQueryRunner和JdbcUtils)   (本文核心

【转】【很全很新】C3P0 连接池和 DBUtils 配合事务使用总结

[转]https://blog.csdn.net/guozhaohui628/article/details/84793028 很久没用原生连接池,最近想写个小功能,结果发现很多地方不太懂,然后网上搜了半天的 c3p0 相关内容,全不符合我想要的.相同内容太多 而且没什么,所以我自己来总结下吧. 01 总结全文从以下来总结 连接池的作用,为什么要使用连接池书写自己的连接池,用于理解框架 c3p0 等连接池连接池框架 c3p0 使用连接池框架 c3p0 和 DBUtils 的配合使用配合事务的使用

Spring3.x中的分布式事务配置

因为用Spring3.x已经有一段时间了,原来的事务配置基本上是基于同一数据源(可以用一个连接,在数据操作上指定多个数据库的操作,也能够进行回滚,事务的提交,基本上实现了分布式的事务处理),今天特地用atomikos进行了事务配置,进行了简单的测试,因为atomikos这个配置数据源时,自带了连接池,对于连接池的性能没有进行专门的测试,把原来的c3p0的事务配置去掉了,这个有待明天进行一次测试. 所依赖Java开源包,用maven自动下载: 我的配置 <properties> <atom

java缓存(2、ThreadLocal&lt;T&gt;)

程序图 描述 ThreadCache类是ThreadLocal<T>类的封装,UserManagerServlet请求方法里面创建一个User对象,然后,将对象放到ThreadLocal中,然后,从UserManagerDao获得该对象,再返回给Servlet 程序 ThreadCache package com.tgb.util; import com.tgb.entity.User; public class ThreadCache { private static ThreadLocal

java-结合c3p0封装的db 事务 类

将Connection对象,绑定到当前线程中去,这样在每一个方法中都能使用这个链接. DataSourceUtils.java package com.itheima.utils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.sql.DataSource; import com.mchange

Spring配置文件中的C3P0数据源配置和事务配置(采用mysql)

直接上代码 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/s

网络协议 finally{ return问题 注入问题 jdbc注册驱动问题 PreparedStatement 连接池目的 1.2.1DBCP连接池 C3P0连接池 MYSQL两种方式进行实物管理 JDBC事务 DBUtils事务 ThreadLocal 事务特性 并发访问 隔离级别

1.1.1 API详解:注册驱动 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 原因有2个: >导致驱动被注册2次. >强烈依赖数据库的驱动jar 解决办法: Class.forName("com.mysql.jdbc.Driver"); 1.1.2 API详解:java.sql.Statement接口: 操作sql语句,并返回相应结果 String sql = "某SQL语句&qu

我的学习之路_第二十二章_事务

JDBC事务 [事务] 作用: 保证多条SQL语句,要么都执行成功,要么都执行失败. mysql数据库,执行SQL语句,自动开启事务,提交事务,回滚事务,把数据永久保存 oracle数据库,执行SQL语句,手动开始会务,提交事务,回滚事务,把数据永久保存. Connection接口中和事务有关的方法: 无返回值 setAutoCommit(boolean autoCommit) 将此连接的自动提交模式设置为给定状态. 参数:autoCommit : true表示自动提交模式, false表示禁用

10.Spring事务管理【TX】

转账案例环境搭建 1.引入JAR包 IOC的6个包 AOP的4个包 C3P0的1个包 MySQL的1个驱动包 JDBC的2个目标包 整合JUnit测试1个包 2.引入配置文件 log4j.properties+applicationContext.xml ### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=