日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java代码中添加事务_C#和JAVA中编写事务代码

發布時間:2025/3/21 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中编写事务代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。