javaweb开发过程中小工具系列之支持事务的JdbcUtils
来源:互联网 发布:电脑没有网络连接 编辑:程序博客网 时间:2024/06/05 09:14
在javaweb项目的开发过程中,不可避免的会与数据库打交道。
此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连接池得到DataSourceprivate static DataSource ds = new ComboPooledDataSource();//定义一个Connection来判断是否有事务private static Connection con = null;//返回DataSourcepublic static DataSource getDataSource(){return ds;}//通过DataSource得到Connectionpublic static Connection getConnection() throws SQLException{//如果开启了事务,则con不为空,应该直接返回conif(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操作@Testpublic 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操作@Testpublic 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();}}}}
0 0
- javaweb开发过程中小工具系列之支持事务的JdbcUtils
- javaweb开发过程中小工具系列之带事务的QueryRunner
- javaweb开发过程中小工具系列之JavaMail发邮件
- javaweb开发过程中小工具系列之返回一个不重复的字符串
- javaweb开发过程中小工具系列之将Map转换成对象
- 能做事务的JdbcUtils工具
- javaWeb开发过程中小细节总结(1)
- javaWeb开发过程中小细节总结(2)
- JdbcUtils工具的抽取
- java--javaWeb--终极版JDBCUtils,使用事务、commons-dbutils、c3p0
- Java学习篇之JDBCUtils工具类
- 工欲善其事必先利其器之javaweb开发工具
- JDBC:编写通用的 JDBCUtils工具类
- ibatis开发过程中小计
- JDBCUtils动手实现自己的JDBC工具类之二(实践篇)
- JDBCUtils 处理事务
- JDBC学习之JDBCUtils的编写
- JavaWeb系列之十三(jdbc事务与连接池)
- ios 设置字体 斜体 粗体
- MFC中使用radio分组
- 轻量级SSH—Dropbear在嵌入式linux上的移植
- LayaAir引擎学习日志6----LayaAir IDE创建AS3项目并详解目录结构
- 帮忙解析一下一段xml
- javaweb开发过程中小工具系列之支持事务的JdbcUtils
- Android Fresco - SimpleDraweeView 圆形动图设置
- 远程连接-windows连接windows桌面(远程桌面)
- LayaAir引擎学习日志7----AS3语言中FlashDevelop中显示文本Hello Layabox(AS3)
- GPS NMEA码格式
- 关于C++中用new申请动态数组的初始化的两种方式
- TEC1303.Form个性化技术总结 - 第三部分 Custom.pll个性化技术讲解
- 仿真序列
- 音视频开发学习笔记