1. 程式人生 > >事務的學習,從jdbc開始:jdbc對事務的支持與實現

事務的學習,從jdbc開始:jdbc對事務的支持與實現

如何實現 ransac 阻止 事務隔離 完成後 value 事務提交 val ack

  在使用spring對項目進行開發時,所有的事務都是由spring來管理的。這樣一來我們就可以不需要操心事務,可以專心的處理業務代碼。

  但是,事務的底層究竟是如何實現的呢?那就從jdbc開始學習。

  在使用jdbc與數據庫交互時,都是通過Connection來操作的。

  默認情況下,Connection會自動提交事務,即每執行一條SQL語句,也就對應一個事務。

  但是在開發過程中,一個事務通常會管理一組SQL統一的提交,來保證數據的安全。

  這時,就需要Connection#setAutoCommit(false)來阻止Connection的自動提交,並通過Connection#setTransactionIsolation()設置事務的隔離級別

(具體可以百度)。

  當sql準備完成後,再通過Connection#commit提交事務,或者通過Connection#rollback()回滾事務

  代碼示例:

package jdbcTransactionDemo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

import org.junit.Test;

public class transactionDemo {
    @Test
    
public void demo() throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/test", "root", "123456"); conn.setAutoCommit(false);//關閉自動提交機制 conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);//
設置事務隔離級別 try { Statement stmt=conn.createStatement(); int rows=stmt.executeUpdate("insert into user(user_name,password) values(\"小明\",\"psw123456\")"); System.out.println(rows); rows=stmt.executeUpdate("update user set user_name=\"小紅\" where user_name=\"小明\""); System.out.println(rows);
        conn.commit();
//事務提交 }catch (Exception e) { System.out.println("事務回滾了"); e.printStackTrace(); conn.rollback();//事務回滾 } } }

事務的學習,從jdbc開始:jdbc對事務的支持與實現