C#  DAL层代码,运行多条增删改,使用事务操作:

  1. /// <summary>
  2. /// 运行 多条增删改 (非查询语句)
  3. /// </summary>
  4. /// <param name="strSql"></param>
  5. /// <param name="paras"></param>
  6. /// <returns></returns>
  7. public static int ExcuteNonQuerys(string[] strSqls, SqlParameter[][] paras2Arr)
  8. {
  9. int res = 0;
  10. //创建连接通道
  11. using (SqlConnection conn = new SqlConnection(strConn))
  12. {
  13. conn.Open();
  14. //创建 事务
  15. SqlTransaction tran = conn.BeginTransaction();
  16. //创建命令对象
  17. SqlCommand cmd = new SqlCommand();
  18. //为命令对象指定连接通道
  19. cmd.Connection = conn;
  20. //为命令对象指定事务
  21. cmd.Transaction = tran;
  22. try
  23. {
  24. //循环运行sql语句
  25. for (int i = 0; i < strSqls.Length; i++)
  26. {
  27. //获得要运行的sql语句
  28. string strSql = strSqls[i];
  29. //为命令对象指定 此次运行的 sql语句
  30. cmd.CommandText = strSql;
  31. //加入參数
  32. if (paras2Arr.Length > i)//假设 參数2维数组的长度大于当前循环的下标
  33. {
  34. cmd.Parameters.AddRange(paras2Arr[i]);//将 交错数组 的第一个元素(事实上也是一个数组,加入到參数集合中)
  35. }
  36. res += cmd.ExecuteNonQuery();
  37. cmd.Parameters.Clear();
  38. }
  39. tran.Commit();//提交事务
  40. }
  41. catch (Exception ex)
  42. {
  43. res = 0;
  44. tran.Rollback();//回滚事务
  45. throw ex;
  46. }
  47. }
  48. return res;
  49. }

JAVA  DAO层中编写事务代码:

  1. @Test
  2. public void test(){
  3. Connection conn = null;
  4. PreparedStatement stmt = null;
  5. Savepoint sp = null;
  6. try{
  7. conn = JdbcUtil.getConnection();
  8. conn.setAutoCommit(false); //开启事务
  9. stmt = conn.prepareStatement("update account set money=money-100 where name='aaa'");
  10. stmt.executeUpdate();
  11.  
  12. stmt = conn.prepareStatement("update account set money=money+100 where name='bbb'");
  13. stmt.executeUpdate();
  14.  
  15. sp = conn.setSavepoint();//设置回滚点
  16.  
  17. stmt = conn.prepareStatement("update account set money=money-100 where name='bbb'");
  18. stmt.executeUpdate();
  19. int i=1/0; //bbb给ccc转账时遇到异常
  20. stmt = conn.prepareStatement("update account set money=money+100 where name='ccc'");
  21. stmt.executeUpdate();
  22.  
  23. }catch(Exception e){
  24. e.printStackTrace();
  25. try {
  26. conn.rollback(sp); //回滚事务
  27. } catch (SQLException e1) {
  28. e1.printStackTrace();
  29. }
  30. }finally{
  31. try {
  32. conn.commit(); //事务提交
  33. } catch (SQLException e) {
  34. e.printStackTrace();
  35. }
  36. JdbcUtil.release(null, stmt, conn);
  37. }
  38. }

JAVA  Service层使用事务操作代码:

  1. import java.io.InputStream;
  2. import java.sql.Connection;
  3. import java.sql.SQLException;
  4. import java.util.Properties;
  5.  
  6. import javax.sql.DataSource;
  7.  
  8. import org.apache.commons.dbcp.BasicDataSourceFactory;
  9. //把得到连接及事务有关的方法写到此类中
  10. public class TransactionUtil {
  11. private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
  12.  
  13. private static DataSource ds;
  14. static{
  15. try {
  16. InputStream in = DBCPUtil.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
  17. Properties props = new Properties();
  18. props.load(in);
  19. ds = BasicDataSourceFactory.createDataSource(props);
  20. } catch (Exception e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. public static DataSource getDataSource(){
  25. return ds;
  26. }
  27. public static Connection getConnection(){
  28. try {
  29. Connection conn = tl.get();
  30. if(conn==null){
  31. conn = ds.getConnection();
  32. tl.set(conn);
  33. }
  34. return conn;
  35. } catch (SQLException e) {
  36. throw new RuntimeException(e);
  37. }
  38. }
  39. public static void startTransaction(){
  40. try {
  41. Connection conn = tl.get();
  42. if(conn==null){
  43. conn = getConnection();
  44. // tl.set(conn);
  45. }
  46. conn.setAutoCommit(false);
  47. } catch (SQLException e) {
  48. throw new RuntimeException(e);
  49. }
  50. }
  51. public static void rollback(){
  52. try {
  53. Connection conn = tl.get();
  54. if(conn==null){
  55. conn = getConnection();
  56. // tl.set(conn);
  57. }
  58. conn.rollback();
  59. } catch (SQLException e) {
  60. throw new RuntimeException(e);
  61. }
  62. }
  63. public static void commit(){
  64. try {
  65. Connection conn = tl.get();
  66. if(conn==null){
  67. conn = getConnection();
  68. // tl.set(conn);
  69. }
  70. conn.commit();
  71. } catch (SQLException e) {
  72. throw new RuntimeException(e);
  73. }
  74. }
  75. public static void relase(){
  76. try {
  77. Connection conn = tl.get();
  78. if(conn!=null){
  79. conn.close();
  80. tl.remove();
  81. }
  82. } catch (SQLException e) {
  83. throw new RuntimeException(e);
  84. }
  85. }
  86. }

C#和JAVA中编写事务代码的更多相关文章

  1. Java中的事务——JDBC事务和JTA事务

    Java中的事务——JDBC事务和JTA事务 转载:http://www.hollischuang.com/archives/1658 之前的事务介绍基本都是数据库层面的事务,本文来介绍一下J2EE中 ...

  2. 如何在Java中调用Python代码

    有时候,我们会碰到这样的问题:与A同学合作写代码,A同学只会写Python,而不会Java, 而你只会写Java并不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方设法“调 ...

  3. .Net高级进阶,在复杂的业务逻辑下,如何以最简练的代码,最直观的编写事务代码?

    本文将通过场景例子演示,来通俗易懂的讲解在复杂的业务逻辑下,如何以最简练的代码,最直观的编写事务代码. 通过一系列优化最终达到两个效果,1.通过代码块来控制事务(分布式事务),2.通过委托优化Tran ...

  4. 第77节:Java中的事务和数据库连接池和DBUtiles

    第77节:Java中的事务和数据库连接池和DBUtiles 前言 看哭你,字数:8803,承蒙关照,谢谢朋友点赞! 事务 Transaction事务,什么是事务,事务是包含一组操作,这组操作里面包含许 ...

  5. 在Java中调用Python代码

    极少数时候,我们会碰到类似这样的问题:与A同学合作写代码, A同学只会写Python,不熟悉Java ,而你只会写Java不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方 ...

  6. java中执行js代码

    要在java中执行js代码,首先明白,java不支持浏览器本身的方法.支持自定义的js方法,否则会报错 先新建一个js文件:jsss.js 内容如下: function aa(a,b){ return ...

  7. JAVA中执行JavaScript代码并获取返回值

    JAVA中执行JavaScript代码并获取返回值 场景描述 实现思路 技术要点 代码实现 测试方法 运行结果 改进空间 场景描述 今天在CSDN上偶然看到一个帖子对于一段字符串 “var p=‘xx ...

  8. Java中的事务——全局事务与本地事务

    转载,原文来源 http://www.hollischuang.com Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务.这是从事务的实现角度区 ...

  9. Java中的事务

    Java中的事务 学习了:https://www.cnblogs.com/chengpeng15/p/5802930.html 膜拜一下 org 分为三类:jdbc事务.jta事务.容器事务:

随机推荐

  1. 实例化flask的参数及对app的配置

    Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? 首先展示一下: from ...

  2. Html学习-File控件学习

    情况一:不设置enctype HTML内容 <form action="02Upload.ashx" method="post"> <inpu ...

  3. js基础---数字日期及运算

    显示年月日 var a=new Date; console.log(a); var year=a.getFullYear(); var month=a.getMonth()+1; var day=a. ...

  4. PHP MySQL 连接数据库,进行增、删、改、查、操作

    <table width="100%" border="1" cellpadding="0" cellspacing="0& ...

  5. asp.net MVC 下拉多级联动及编辑

    多级联动实现,附源码.当前,部分代码是参与博客园其它网友. 新增,前台代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2 ...

  6. js获取图片信息(二)-----js获取img的height、width宽高值为0

    首先,创建一个图片对象: var oImg= new Image(); oImg.src = "apple.jpg"; 然后我们打印一下图片的信息: console.log(oIm ...

  7. day04-交互、格式化输出及基本运算符

    目录 与用户交互 python2和python3交互的区别 格式化输出 1 字符串拼接 2 占位符 3 format格式 4 f-string格式 基本运算符 算术运算符 比较运算符 赋值运算符 逻辑 ...

  8. IE低版本和高级浏览器对文本输入事件兼容

    1 一般 使用oninput 事件可以监控文本输入事实触发 2 兼容需要使用onpropertychange . 3 兼容写法   var evenInput=DOM元素.oninput || DOM ...

  9. 基于Arduino的音乐动感节奏灯

    1.音乐动感节奏灯是个什么东西? 前段时间听音乐觉得无聊,便想着音乐光听也没意思啊,能不能 “看见” 音乐呢?于是谷歌了一番,发现还真有人做了将音乐可视化的东西,那就是音乐节奏灯.说的简单点就是LED ...

  10. java面试题(转)

    1.面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:- 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些 ...