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事务.容器事务:
随机推荐
- ansible基础知识(二)
软件相关模块 yum yum和rpm的区别 rpm: (Redhat package manager)RPM管理支持事务机制.增强了程序安装卸载的管理. yum: YUM被称为 Yellow dog ...
- 实例化flask的参数及对app的配置
Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? 首先展示一下: from ...
- mysql之数据去重并记录总数
引用: http://blog.sina.com.cn/s/blog_6c9d65a10101bkgk.htmlhttp://www.jb51.net/article/39302.htm 1.使用di ...
- Android项目实战_手机安全卫士软件管家
###1.应用程序信息的flags 1. int flags = packageInfo.applicationInfo.flags2. 0000 0000 0000 0000 0000 0000 0 ...
- Hive扩展功能(五)--HiveServer2服务高可用
软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这五部机, 每部主机的用户名都为centos ...
- (转) 基于Arcgis for Js的web GIS数据在线采集简介
http://blog.csdn.net/gisshixisheng/article/details/44310765 在前一篇博文“Arcgis for js之WKT和geometry转换”中实现了 ...
- day02-操作系统、编程语言分类及python安装
目录 操作系统 编程语言分类 安装python解释器 操作系统 操作系统有什么用 操作系统能接受外部指令转化成0和1,并把一些对硬件的复杂操作简化成一个个简单的接口,作为中间人连接硬件和软件 计算机三 ...
- Eclipse 使用前的配置
一,修改eclipse对jdk的依赖项 1.查看设置的编译器编译版本:设置成本地jdk一致的版本 点击窗口->首选项 找到java 选择编辑器,查看现在的编译jdk版本 改成本地jdk版本 jd ...
- 阅读《JavaScript设计模式》第二章心得
面向对象编程 面向对象编程就是将你的需求抽象成一个对象.然后针对这个对象分析其特征(属性)与动作(方法).这个对象我们称之为类.面向对象编程思想其中的一个特点就是封装. 1.私有属性.私有方法.特权方 ...
- win10如何进入安全模式的几种方法
首先,说一下安全模式的作用: 安全模式, 用途有很多,常见的作用有以下几点 1. 电脑可能由于安装了某些驱动或者软件,不兼容导致电脑启动不了,可以进入安全模式卸载 2. 电脑中病毒之后,可以进入安全模 ...