Java事務處理


事務

1.原子性

事務是應用中不可再分的最小邏輯執行體

2.一致性

事務的執行結果必須使數據庫從一個一致性狀態變到另一個一致性狀態

3.隔離性

各個 事務的執行不干擾

4.持續性

事務一旦提交,對數據庫所做的任何改變都記錄到永久存儲器中,即保存到了物理數據庫

Java中的事務

package ch13;
import java.sql.*;

/**
 * Created by Jiqing on 2016/12/26.
 */
public class TransactionTest {
    private String driver;
    private String url;
    private String user;
    private String pass;
    // 初始化參數
    public void initParam() {
        driver = "com.mysql.jdbc.Driver";
        url    = "jdbc:mysql://127.0.0.1:3306/test";
        user   = "root";
        pass   = "123456";
    }

    public void insertInTransation(String[] sqls) throws Exception {
        // 加載驅動
        Class.forName(driver);
        try (
                Connection conn = DriverManager.getConnection(url,user,pass)) {
            // 關閉自動提交
            conn.setAutoCommit(false);
            try(
                    // 使用Connection來創建一個Statement
                    Statement stmt = conn.createStatement()) {
                    for (String sql : sqls) {
                        stmt.executeUpdate(sql);
                    }
            }

            // 回滾
            // conn.rollback();

            // 提交事務
            conn.commit();
        }


    }

    public static void main(String[] args) throws Exception {
        TransactionTest tt = new TransactionTest();
        tt.initParam();
        String[] sqls = new String[] {
                "insert into student values('1','Li')",
                "insert into student values('2','Zhao')",
                "insert into student values('3','Ji')"
        };
        tt.insertInTransation(sqls);
    }
}

增加回滾

package ch13;
import java.sql.*;

/**
 * Created by Jiqing on 2016/12/26.
 */
public class TransactionTest {
    private String driver;
    private String url;
    private String user;
    private String pass;
    // 初始化參數
    public void initParam() {
        driver = "com.mysql.jdbc.Driver";
        url    = "jdbc:mysql://127.0.0.1:3306/test";
        user   = "root";
        pass   = "123456";
    }

    public void insertInTransation(String[] sqls) throws Exception {
        // 加載驅動
        Class.forName(driver);
        try (
                Connection conn = DriverManager.getConnection(url,user,pass)) {
            // 關閉自動提交
            conn.setAutoCommit(false);
            try(
                    // 使用Connection來創建一個Statement
                    Statement stmt = conn.createStatement()) {
                    for (String sql : sqls) {
                        stmt.executeUpdate(sql);
                    }
            }

            // 回滾
            conn.rollback();

            // 提交事務
            conn.commit();
        }


    }

    public static void main(String[] args) throws Exception {
        TransactionTest tt = new TransactionTest();
        tt.initParam();
        String[] sqls = new String[] {
                "insert into student values('4','Qian')",
                "insert into student values('5','Sun')",
                "insert into student values('6','Liu')"
        };
        tt.insertInTransation(sqls);
    }
}

內容不會被保存。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM