手动控制事务
来源:互联网 发布:二手笔记本 知乎 编辑:程序博客网 时间:2024/06/05 05:15
1、事务简介:
1)事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。
2)事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。
COMMIT表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。 ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的操作全部撤消,滚回到事务开始的状态。
2、事务的应用
1、编辑事务操作类(ConnectionManager):
public class ConnectionManager { //设置当前线程变量,以确保获得的是同一Connection private static ThreadLocal<Connection> connectionHolder=new ThreadLocal<Connection>(); public static Connection getConnection(){ //获得线程中相应的Connection Connection conn=connectionHolder.get(); //如果当前线程中没有绑定相应的Connection if (conn==null){ try { JdbcConfig jdbcConfig=XmlConfigReader.getInstance().getJdbcConfig(); //加载驱动 Class.forName(jdbcConfig.getDriverName()); String url=jdbcConfig.getUrl(); String userName=jdbcConfig.getUserName(); String password=jdbcConfig.getPassword(); //建立连接 conn = (Connection) DriverManager.getConnection(url, userName, password); //将Connection设置到当前线程中 connectionHolder.set(conn); } catch (ClassNotFoundException e) { e.printStackTrace(); throw new ApplicationException("系统错误,请联系管理员!"); } catch (SQLException e) { e.printStackTrace(); throw new ApplicationException("系统错误,请联系管理员!"); } } return conn; } /** * 关闭连接 */ public static void closeConnection(){ //从ThreadLocal中获取Connection Connection conn=connectionHolder.get(); if (conn!= null){ try { conn.close(); //从ThreadLocal中清除Connection connectionHolder.remove(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 手动开启事务 * @param conn */ public static void beginTransaction(Connection conn){ try{ if (conn != null){ if (conn.getAutoCommit()){ conn.setAutoCommit(false); //手动提交 } } }catch(SQLException e){} } /** * 手动提交事务 * @param conn */ public static void commitTransaction(Connection conn){ try{ if (conn!=null){ if (!conn.getAutoCommit()){ conn.commit(); } } }catch(SQLException e){} } /** * 回滚事务 * @param conn */ public static void rollbackTransaction(Connection conn){ try{ if (conn!=null){ if (!conn.getAutoCommit()){ conn.rollback(); } } }catch(SQLException e){} } public static void resetConnection(Connection conn){ try{ if (conn!=null){ if (conn.getAutoCommit()){ conn.setAutoCommit(false); }else{ conn.setAutoCommit(true); } } }catch(SQLException e){} } }2、手动事务操作/** * 手动事物操作 */ public void addFlowCard(FlowCard flowCard) throw ApplicationException{ Connection conn=null; try{ //取得Connection conn=Connection.getConnection(); //开启事务 ConnectionManager.beginTransaction(conn); //操作1:添加1 //操作2:添加2 //提交事务 ConnectionManager.commitTransaction(conn); }catch(Exception e){ //回滚事物 ConnectionManager.rollbackTransaction(conn); }finally{ //关闭Connection并从ThreadLocal中清除 ConnectionManager.closeConnection(); } }
1 0
- 手动控制事务
- spring手动事务控制
- SpringMVC 手动控制事务提交
- Spring+Mybatis 手动控制事务
- SpringMVC 手动控制事务提交
- SpringMVC 手动控制事务提交
- SpringMVC 手动控制事务提交 --各种坑
- spring中事务传播下,特殊方法手动控制事务
- java积累——数据库手动控制事务工具类
- 获取ApplicationContext的方法及手动控制事务提交
- Spring 事务的配置和使用详解(包括手动对事务的控制部分)
- 手动管理事务
- spring 手动事务
- spring手动事务
- Spring 手动提交事务
- 事务控制
- 事务控制
- 事务控制
- js Grid - 列表插件
- 浮点数转换成字符串函数
- codeforces 560 A. Currency System in Geraldion
- 数据结构---单链表(1)
- 【图论】【二分图匹配】[BZOJ 1085]完美的牛栏
- 手动控制事务
- 【leetcode c++】102 Binary Tree Level Order Traversal
- Jquery实现行内编辑
- Java中AtomicInteger的使用!!!
- Java 集合类图 详解
- Spring@Autowired注解与自动装配
- 国内外三个不同领域巨头分享的Redis实战经验及使用场景
- 笔记117--AsyncTask随Activity结束而终止
- 【YII2学习笔记】20150727-1