java代码中添加事务_C#和JAVA中编写事务代码
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中编写事务代码相关推荐
- Hexo中添加音乐(列表)、视频的代码
以下为在HexoHexoHexo中添加音乐(列表).视频的代码.注意:在使用代码前要安装hexo−tag−aplayerhexo-tag-aplayerhexo−tag−aplayer[用于播放音乐( ...
- R语言ggplot2在可视化图像中添加横线并在横线中添加文本、为横线中添加的文本添加文本框、自定义文本框的填充色(background color for a text annotation)
R语言ggplot2在可视化图像中添加横线并在横线中添加文本.为横线中添加的文本添加文本框.自定义文本框的填充色(background color for a text annotation) 目录
- java窗体中添加图片_在java窗体程序中添加图片的方法
在java窗体程序中添加图片的方法 发布时间:2020-06-16 11:24:13 来源:亿速云 阅读:148 作者:Leah 这篇文章主要为大家详细介绍了在java窗体程序中添加图片的方法,图文详 ...
- java项目引入ear包_在Eclipse for EAR Project中添加外部jar文件 - java
我需要将外部jar文件添加到EAR项目. 我确实添加了,但是jar文件没有反映在lib目录中,它显示在lib目录下面. 我在右键单击Deployment Descriptor,Import-> ...
- Java商品规格添加购物车_关于java+jsp购物车添加商品的有关问题,来哦
关于java+jsp购物车添加商品的有关问题,来哦 热度:9587 发布时间:2013-02-25 21:44:20 关于java+jsp购物车添加商品的问题,,高手进来哦 提示错误: An er ...
- ART中添加 neg.s neg.d 指令及相关代码
一.android 5.0 中添加neg.s neg.d指令的代码: 修改 build/core/main.mk 文件中 dalvik.vm.dex2oat-filter = interpret-o ...
- 案例:实现在购物车中添加商品和删除购物车中指定商品的功能
一.向购物车中添加商品 1.1.创建AddCartServlet public class AddCartServlet extends HttpServlet {public void doGet( ...
- 微信云开发云数据库,数组中添加对象,修改数组中对象,删除数组中对象
添加 向data数组中添加对象,代码如下,event._id,event.data,id要在哪条数据中添加对象,data为字段push为添加 ` const db = cloud.database() ...
- html5在li中添加按钮,如何在html5blank_nav()中的ul和li中添加类?
我尝试在ul li中添加类, 以及如何在html5blank_nav()使用html5blank模板时在ul和li上添加类.如果在html5blank_nav()使用html5blank模板, 如何在 ...
最新文章
- 链客区块链技术问答社区
- 服务器显示接口类型,查看服务器各接口卡情况的命令是:lspci
- 升维:ValueError: all the input arrays must have same number of dimensions,
- 关于Unity -Vuforia -Android 开发 ,平台的搭建(极品菜鸟完整版)
- 基于qt和mysql的地铁线路系统_[源码和文档分享]基于QT实现的可视化地铁换乘查询系统...
- 25 To Life
- KAFKA 同步和异步消息的发送(开发实战)
- 【K8S】Docker向私有仓库拉取/推送镜像报错(http: server gave HTTP response to HTTPS client)
- linux samba教程,Linux samba的配置和使用
- Python风格总结: List sort()方法
- 贺利坚老师汇编课程36笔记:[BX+SI+IDATA]和[BX+DI+IDATA]寻址
- [转载] Python集合取交集intersection()函数和intersection_update()函数
- AtCoder Beginner Contest 173 D - Chat in a Circle
- java基础——浅析设计模式之单例模式
- python中换行的转义字符_Python语言中表示换行的转义字符是____________。(2.5分)_学小易找答案...
- python中字典的用法_Python中字典的详细用法
- 误删除恢复 (extundelete)
- 程序员,从培训班出来的都是垃圾!!!?
- html简洁漂亮的个人简历,个人主页,个人简介网页版(源码)
- Adversarial Attack
热门文章
- Chrome浏览器取代火狐的十大理由
- [导入]失败的软件实训课
- nurbs非均匀有理B样条实现船体重建
- C++中四种类型转换方式
- Python_二叉树定义与遍历
- RedHat7.0更新yum源(踩过的坑)
- 吴恩达深度学习课程deeplearning.ai课程作业:Class 1 Week 2 assignment2_2
- 解决ubuntu打开windows中txt文件出现乱码现象
- dev layoutview 怎么显示大小_Liunx驱动学习:基于imx6ul 驱动oledssd1306 实现终端显示...
- 各种烧写文件格式简介-ELF Hex Bin axf