C#和JAVA中編寫事務代碼

來源:互聯網
上載者:User

標籤:toc   ops   ndt   puts   rac   下標   thread   apach   命令   

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層中編寫事務代碼:

@Testpublic 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中編寫事務代碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.