JDBC事務的提交案例

筆記

事務:一個步驟包含多個操作,要麼同時成功,要麼同時失敗。例子:銀行轉賬,轉賬的人錢變少,另一個人的錢得變多,要麼同時成功,要麼同時失敗。

開啓事務:setAutoCommit(boolean autoCommit):調用該方法設置參數爲false即爲開啓成功

提交事務:commit

回滾事務:rollback()

package com.zqyzc.com;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import com.zqyzc.util.JDBCUtils;

/**
 * 事務操作
 * @author 92086
 *
 */
public class JDBCTest1 {
	public static void main(String[] args) {
		// 1獲取鏈接
		Connection conn = null;
		PreparedStatement pstmt1 = null;
		PreparedStatement pstmt2 = null;
		try {
			//1、獲取鏈接
			conn = JDBCUtils.getConnection();
			//2、開啓事務
			conn.setAutoCommit(false);
			
			//2、定義sql
			//2.1 張三 +500
			String sql1 = "update account set balance = balance + ? where id = ?";
			//2.2李四 -500
			String sql2 = "update account set balance = balance - ? where id = ?";
			//3、獲取執行sql對象
			pstmt1 = conn.prepareStatement(sql1);
			pstmt2 = conn.prepareStatement(sql2);
			//4、設置參數
			pstmt1.setDouble(1, 500);
			pstmt1.setDouble(2, 1);
			
			pstmt2.setDouble(1, 500);
			pstmt2.setDouble(2, 2);
			
			//5、執行sql
			pstmt1.executeUpdate();
			pstmt2.executeUpdate();
			//當所以sql都執行完,提交事務
			conn.commit();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			//事務的會滾操作
			try {
				if(conn!=null)
					conn.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			e.printStackTrace();
		}finally{
			JDBCUtils.close(pstmt1, conn);
			JDBCUtils.close(pstmt2, null);
			
		}
		
	}

}

事務在獲取鏈接後開啓,在執行完所有的sql後關閉。當出現異常,無論什麼異常,事務需要回滾

執行前:

執行後

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章