javaweb开发过程中小工具系列之支持事务的JdbcUtils
2017-01-04 12:25
363 查看
在javaweb项目的开发过程中,不可避免的会与数据库打交道。
此util需要使用c3p0连接池。
代码示例:
JdbcUtils
使用jdbc进行测试
此util需要使用c3p0连接池。
代码示例:
JdbcUtils
package cn.ccnu.jdbc; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JdbcUtils { //通过c3p0连接池得到DataSource private static DataSource ds = new ComboPooledDataSource(); //定义一个Connection来判断是否有事务 private static Connection con = null; //返回DataSource public static DataSource getDataSource(){ return ds; } //通过DataSource得到Connection public static Connection getConnection() throws SQLException{ //如果开启了事务,则con不为空,应该直接返回con if(con != null){ return con; } return ds.getConnection(); } // 开启事务 public static void beginTransaction() throws SQLException { //判断con是否为空,如果不为空,则说明事务已经开启 if(con != null){ throw new SQLException("事务已经开启了,不能重复开启事务"); } //如果不为空,则开启事务 con = getConnection(); //设置事务提交为手动 con.setAutoCommit(false); } // 提交事务 public static void commitTransaction() throws SQLException { //判断con是否为空,如果为空,则说明没有开启事务 if(con == null){ throw new SQLException("没有开启事务,不能提交事务"); } //如果con不为空,提交事务 con.commit(); //事务提交后,关闭连接 con.close(); //表示事务已经结束 con = null; } // 回滚事务 public static void rollbackTransaction() throws SQLException { //判断con是否为空,如果为空,则说明没有开启事务,也就不能回滚事务 if(con == null){ throw new SQLException("没有开启事务,不能回滚事务"); } //事务回滚 con.rollback(); //事务回滚后,关闭连接 con.close(); //把con置为null,表示事务已经结束 con = null; } // 关闭事务 public static void releaseConnection(Connection connection) throws SQLException { //如果参数连接与当前事务连接不相等,则说明参数连接不是事务连接,可以关闭,否则由事务关闭 if(connection != null && con != connection){ //如果连接没有被关闭,关闭之 if(!connection.isClosed()){ connection.close(); } } } }
使用jdbc进行测试
package cn.ccnu.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner; import org.junit.Test; public class JdbcUtilsTest { //没有事务的普通的JDBC操作 @Test public void test11() throws SQLException{ PreparedStatement ps = null; Connection conn = JdbcUtils.getConnection(); String sql = "update user set salary = ? where id = ?"; ps = conn.prepareStatement(sql); ps.setInt(1, 100); ps.setInt(2, 1); ps.executeUpdate(); JdbcUtils.releaseConnection(conn); } //有事务的JDBC操作 @Test public void test22(){ try{ JdbcUtils.beginTransaction(); PreparedStatement ps = null; Connection conn = JdbcUtils.getConnection(); String sql1 = "update user set salary = salary + ? where id = 1;"; ps = conn.prepareStatement(sql1); ps.setInt(1, 200); int i = ps.executeUpdate(); System.out.println(i); //认为制造异常 int n = 1/0; String sql2 = "update user set salary = salary - ? where id = 2;"; ps = conn.prepareStatement(sql2); ps.setInt(1, 200); i = ps.executeUpdate(); System.out.println(i); JdbcUtils.commitTransaction(); }catch(Exception e){ try { JdbcUtils.rollbackTransaction(); } catch (SQLException e1) { e1.printStackTrace(); } } } }
相关文章推荐
- javaweb开发过程中小工具系列之将Map转换成对象
- javaweb开发过程中小工具系列之带事务的QueryRunner
- javaweb开发过程中小工具系列之JavaMail发邮件
- 我的成长比价系列:java web开发过程中遇到的错误一:sql语句换行错误
- JavaWebStudio系列开发工具Visaul Struts版本简介
- javaweb开发过程中小工具系列之返回一个不重复的字符串
- JavaWebStudio系列开发工具Visaul Struts版本简介
- 基于WEB应用开发的java程序员必备工具
- 基于WEB应用开发的java程序员必备工具
- liferay开发系列 之 “Eclipse3.2中 Java Web 开发环境的搭建之LOMBOZ+TOMCA”
- 哪些Java集成开发工具支持Java 2?
- 基于WEB应用开发的java程序员必备工具
- 基于WEB应用开发的java程序员必备工具
- 基于web开发的java常用工具
- 基于WEB应用开发的java程序员必备工具
- 基于WEB应用开发的java程序员必备工具(脚本调试工具、java剖析工具)
- 基于WEB应用开发的java程序员必备工具
- 基于WEB应用开发的java程序员必备工具
- 破解java Struts Web Application开发工具 scioworks Camino
- 基于web的java应用开发的备用工具