mysql 事務管理 Java demo

一、MySQL中的事務是什麼?

事務:多個sql語句的集合。
事務處理可以用來維護數據庫的完整性,保證成批的 SQL 語句要麼全部執行,要麼全部不執行。(來自菜鳥教程)
原子性:一個事務(transaction)中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。(來自菜鳥教程)。
持久性:事務處理結束後,對數據的修改就是永久的,即便系統故障也不會丟失。(來自菜鳥教程)。

說明:
begin:開啓事務,執行的所有sql都是一個事務直到執行commit或者rollback事務就結束。
rollback:回滾
commit:提交

二、用Java寫的小demo:

package com.test;

import java.sql.DriverManager;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

public class Test {

private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String USER = "root";
private static final String PASSWORD = "123";
private static final String URL = "jdbc:mysql://localhost:3306/數據庫名";

public static void main(String[] args) throws ClassNotFoundException, SQLException{
	
	Class.forName(DRIVER);
	Connection connection;
	PreparedStatement preparedStatement = null;
	connection = (Connection) DriverManager.getConnection(URL,USER,PASSWORD);
	try {
	
		connection.setAutoCommit(false);//關閉自動提交事務(默認開啓)
		
		/**
		 * 添加班級信息
		 */
		String sql = "insert into className values(1,'語文班')";
		preparedStatement = (PreparedStatement) connection.prepareStatement(sql);
		preparedStatement.executeUpdate();
		
		/**
		 * 添加學生信息
		 */
		sql = "insert into student values(1,'小明',18,1)";
		preparedStatement =  (PreparedStatement) connection.prepareStatement(sql);
		preparedStatement.executeUpdate();
		
		connection.commit();//如果沒有異常就提交
		System.out.println("正常提交");
		
	} catch (SQLException e) {
		
		connection.rollback();//如果有異常就回滾
		System.out.println("有異常,執行回滾");
		
	}finally {
		preparedStatement.close();
		connection.close();
	}
	}

}

說明:
以上面例子爲例,如果添加班級信息或添加學生信息有一個出現異常,事務都將回滾,有正確的添加信息語句的執行,信息也不會添加到數據庫表中。反之,如果不使用事務管理,添加班級信息或添加學生信息有一個出現異常,那麼沒出現異常的那個sql會將信息添加到數據庫表中。

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