C#和JAVA中编写事务代码
C# DAL层代码,运行多条增删改,使用事务操作:
- /// <summary>
- /// 运行 多条增删改 (非查询语句)
- /// </summary>
- /// <param name="strSql"></param>
- /// <param name="paras"></param>
- /// <returns></returns>
- public static int ExcuteNonQuerys(string[] strSqls, SqlParameter[][] paras2Arr)
- {
- int res = 0;
- //创建连接通道
- using (SqlConnection conn = new SqlConnection(strConn))
- {
- conn.Open();
- //创建 事务
- SqlTransaction tran = conn.BeginTransaction();
- //创建命令对象
- SqlCommand cmd = new SqlCommand();
- //为命令对象指定连接通道
- cmd.Connection = conn;
- //为命令对象指定事务
- cmd.Transaction = tran;
- try
- {
- //循环运行sql语句
- for (int i = 0; i < strSqls.Length; i++)
- {
- //获得要运行的sql语句
- string strSql = strSqls[i];
- //为命令对象指定 此次运行的 sql语句
- cmd.CommandText = strSql;
- //加入參数
- if (paras2Arr.Length > i)//假设 參数2维数组的长度大于当前循环的下标
- {
- cmd.Parameters.AddRange(paras2Arr[i]);//将 交错数组 的第一个元素(事实上也是一个数组,加入到參数集合中)
- }
- res += cmd.ExecuteNonQuery();
- cmd.Parameters.Clear();
- }
- tran.Commit();//提交事务
- }
- catch (Exception ex)
- {
- res = 0;
- tran.Rollback();//回滚事务
- throw ex;
- }
- }
- return res;
- }
JAVA DAO层中编写事务代码:
- @Test
- public void test(){
- Connection conn = null;
- PreparedStatement stmt = null;
- Savepoint sp = null;
- try{
- conn = JdbcUtil.getConnection();
- conn.setAutoCommit(false); //开启事务
- stmt = conn.prepareStatement("update account set money=money-100 where name='aaa'");
- stmt.executeUpdate();
- stmt = conn.prepareStatement("update account set money=money+100 where name='bbb'");
- stmt.executeUpdate();
- sp = conn.setSavepoint();//设置回滚点
- stmt = conn.prepareStatement("update account set money=money-100 where name='bbb'");
- stmt.executeUpdate();
- int i=1/0; //bbb给ccc转账时遇到异常
- stmt = conn.prepareStatement("update account set money=money+100 where name='ccc'");
- stmt.executeUpdate();
- }catch(Exception e){
- e.printStackTrace();
- try {
- conn.rollback(sp); //回滚事务
- } catch (SQLException e1) {
- e1.printStackTrace();
- }
- }finally{
- try {
- conn.commit(); //事务提交
- } catch (SQLException e) {
- e.printStackTrace();
- }
- JdbcUtil.release(null, stmt, conn);
- }
- }
JAVA Service层使用事务操作代码:
- import java.io.InputStream;
- import java.sql.Connection;
- import java.sql.SQLException;
- import java.util.Properties;
- import javax.sql.DataSource;
- import org.apache.commons.dbcp.BasicDataSourceFactory;
- //把得到连接及事务有关的方法写到此类中
- public class TransactionUtil {
- private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
- private static DataSource ds;
- static{
- try {
- InputStream in = DBCPUtil.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
- Properties props = new Properties();
- props.load(in);
- ds = BasicDataSourceFactory.createDataSource(props);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public static DataSource getDataSource(){
- return ds;
- }
- public static Connection getConnection(){
- try {
- Connection conn = tl.get();
- if(conn==null){
- conn = ds.getConnection();
- tl.set(conn);
- }
- return conn;
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
- public static void startTransaction(){
- try {
- Connection conn = tl.get();
- if(conn==null){
- conn = getConnection();
- // tl.set(conn);
- }
- conn.setAutoCommit(false);
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
- public static void rollback(){
- try {
- Connection conn = tl.get();
- if(conn==null){
- conn = getConnection();
- // tl.set(conn);
- }
- conn.rollback();
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
- public static void commit(){
- try {
- Connection conn = tl.get();
- if(conn==null){
- conn = getConnection();
- // tl.set(conn);
- }
- conn.commit();
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
- public static void relase(){
- try {
- Connection conn = tl.get();
- if(conn!=null){
- conn.close();
- tl.remove();
- }
- } catch (SQLException e) {
- throw new RuntimeException(e);
- }
- }
- }
C#和JAVA中编写事务代码的更多相关文章
- Java中的事务——JDBC事务和JTA事务
Java中的事务——JDBC事务和JTA事务 转载:http://www.hollischuang.com/archives/1658 之前的事务介绍基本都是数据库层面的事务,本文来介绍一下J2EE中 ...
- 如何在Java中调用Python代码
有时候,我们会碰到这样的问题:与A同学合作写代码,A同学只会写Python,而不会Java, 而你只会写Java并不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方设法“调 ...
- .Net高级进阶,在复杂的业务逻辑下,如何以最简练的代码,最直观的编写事务代码?
本文将通过场景例子演示,来通俗易懂的讲解在复杂的业务逻辑下,如何以最简练的代码,最直观的编写事务代码. 通过一系列优化最终达到两个效果,1.通过代码块来控制事务(分布式事务),2.通过委托优化Tran ...
- 第77节:Java中的事务和数据库连接池和DBUtiles
第77节:Java中的事务和数据库连接池和DBUtiles 前言 看哭你,字数:8803,承蒙关照,谢谢朋友点赞! 事务 Transaction事务,什么是事务,事务是包含一组操作,这组操作里面包含许 ...
- 在Java中调用Python代码
极少数时候,我们会碰到类似这样的问题:与A同学合作写代码, A同学只会写Python,不熟悉Java ,而你只会写Java不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方 ...
- java中执行js代码
要在java中执行js代码,首先明白,java不支持浏览器本身的方法.支持自定义的js方法,否则会报错 先新建一个js文件:jsss.js 内容如下: function aa(a,b){ return ...
- JAVA中执行JavaScript代码并获取返回值
JAVA中执行JavaScript代码并获取返回值 场景描述 实现思路 技术要点 代码实现 测试方法 运行结果 改进空间 场景描述 今天在CSDN上偶然看到一个帖子对于一段字符串 “var p=‘xx ...
- Java中的事务——全局事务与本地事务
转载,原文来源 http://www.hollischuang.com Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务.这是从事务的实现角度区 ...
- Java中的事务
Java中的事务 学习了:https://www.cnblogs.com/chengpeng15/p/5802930.html 膜拜一下 org 分为三类:jdbc事务.jta事务.容器事务:
随机推荐
- 实例化flask的参数及对app的配置
Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? 首先展示一下: from ...
- Html学习-File控件学习
情况一:不设置enctype HTML内容 <form action="02Upload.ashx" method="post"> <inpu ...
- js基础---数字日期及运算
显示年月日 var a=new Date; console.log(a); var year=a.getFullYear(); var month=a.getMonth()+1; var day=a. ...
- PHP MySQL 连接数据库,进行增、删、改、查、操作
<table width="100%" border="1" cellpadding="0" cellspacing="0& ...
- 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 ...
- js获取图片信息(二)-----js获取img的height、width宽高值为0
首先,创建一个图片对象: var oImg= new Image(); oImg.src = "apple.jpg"; 然后我们打印一下图片的信息: console.log(oIm ...
- day04-交互、格式化输出及基本运算符
目录 与用户交互 python2和python3交互的区别 格式化输出 1 字符串拼接 2 占位符 3 format格式 4 f-string格式 基本运算符 算术运算符 比较运算符 赋值运算符 逻辑 ...
- IE低版本和高级浏览器对文本输入事件兼容
1 一般 使用oninput 事件可以监控文本输入事实触发 2 兼容需要使用onpropertychange . 3 兼容写法 var evenInput=DOM元素.oninput || DOM ...
- 基于Arduino的音乐动感节奏灯
1.音乐动感节奏灯是个什么东西? 前段时间听音乐觉得无聊,便想着音乐光听也没意思啊,能不能 “看见” 音乐呢?于是谷歌了一番,发现还真有人做了将音乐可视化的东西,那就是音乐节奏灯.说的简单点就是LED ...
- java面试题(转)
1.面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:- 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些 ...