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

///

/// 执行 多条增删改 (非查询语句)

///

///

///

///

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 tl = new ThreadLocal();

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);

}

}

}

java代码中添加事务_C#和JAVA中编写事务代码相关推荐

  1. Hexo中添加音乐(列表)、视频的代码

    以下为在HexoHexoHexo中添加音乐(列表).视频的代码.注意:在使用代码前要安装hexo−tag−aplayerhexo-tag-aplayerhexo−tag−aplayer[用于播放音乐( ...

  2. R语言ggplot2在可视化图像中添加横线并在横线中添加文本、为横线中添加的文本添加文本框、自定义文本框的填充色(background color for a text annotation)

    R语言ggplot2在可视化图像中添加横线并在横线中添加文本.为横线中添加的文本添加文本框.自定义文本框的填充色(background color for a text annotation) 目录

  3. java窗体中添加图片_在java窗体程序中添加图片的方法

    在java窗体程序中添加图片的方法 发布时间:2020-06-16 11:24:13 来源:亿速云 阅读:148 作者:Leah 这篇文章主要为大家详细介绍了在java窗体程序中添加图片的方法,图文详 ...

  4. java项目引入ear包_在Eclipse for EAR Project中添加外部jar文件 - java

    我需要将外部jar文件添加到EAR项目. 我确实添加了,但是jar文件没有反映在lib目录中,它显示在lib目录下面. 我在右键单击Deployment Descriptor,Import-> ...

  5. Java商品规格添加购物车_关于java+jsp购物车添加商品的有关问题,来哦

    关于java+jsp购物车添加商品的有关问题,来哦 热度:9587   发布时间:2013-02-25 21:44:20 关于java+jsp购物车添加商品的问题,,高手进来哦 提示错误: An er ...

  6. ART中添加 neg.s neg.d 指令及相关代码

     一.android 5.0 中添加neg.s neg.d指令的代码: 修改 build/core/main.mk 文件中 dalvik.vm.dex2oat-filter = interpret-o ...

  7. 案例:实现在购物车中添加商品和删除购物车中指定商品的功能

    一.向购物车中添加商品 1.1.创建AddCartServlet public class AddCartServlet extends HttpServlet {public void doGet( ...

  8. 微信云开发云数据库,数组中添加对象,修改数组中对象,删除数组中对象

    添加 向data数组中添加对象,代码如下,event._id,event.data,id要在哪条数据中添加对象,data为字段push为添加 ` const db = cloud.database() ...

  9. html5在li中添加按钮,如何在html5blank_nav()中的ul和li中添加类?

    我尝试在ul li中添加类, 以及如何在html5blank_nav()使用html5blank模板时在ul和li上添加类.如果在html5blank_nav()使用html5blank模板, 如何在 ...

最新文章

  1. 链客区块链技术问答社区
  2. 服务器显示接口类型,查看服务器各接口卡情况的命令是:lspci
  3. 升维:ValueError: all the input arrays must have same number of dimensions,
  4. 关于Unity -Vuforia -Android 开发 ,平台的搭建(极品菜鸟完整版)
  5. 基于qt和mysql的地铁线路系统_[源码和文档分享]基于QT实现的可视化地铁换乘查询系统...
  6. 25 To Life
  7. KAFKA 同步和异步消息的发送(开发实战)
  8. 【K8S】Docker向私有仓库拉取/推送镜像报错(http: server gave HTTP response to HTTPS client)
  9. linux samba教程,Linux samba的配置和使用
  10. Python风格总结: List sort()方法
  11. 贺利坚老师汇编课程36笔记:[BX+SI+IDATA]和[BX+DI+IDATA]寻址
  12. [转载] Python集合取交集intersection()函数和intersection_update()函数
  13. AtCoder Beginner Contest 173 D - Chat in a Circle
  14. java基础——浅析设计模式之单例模式
  15. python中换行的转义字符_Python语言中表示换行的转义字符是____________。(2.5分)_学小易找答案...
  16. python中字典的用法_Python中字典的详细用法
  17. 误删除恢复 (extundelete)
  18. 程序员,从培训班出来的都是垃圾!!!?
  19. html简洁漂亮的个人简历,个人主页,个人简介网页版(源码)
  20. Adversarial Attack

热门文章

  1. Chrome浏览器取代火狐的十大理由
  2. [导入]失败的软件实训课
  3. nurbs非均匀有理B样条实现船体重建
  4. C++中四种类型转换方式
  5. Python_二叉树定义与遍历
  6. RedHat7.0更新yum源(踩过的坑)
  7. 吴恩达深度学习课程deeplearning.ai课程作业:Class 1 Week 2 assignment2_2
  8. 解决ubuntu打开windows中txt文件出现乱码现象
  9. dev layoutview 怎么显示大小_Liunx驱动学习:基于imx6ul 驱动oledssd1306 实现终端显示...
  10. 各种烧写文件格式简介-ELF Hex Bin axf