JDBC事務支持及try-with-resources


JDBC事務支持

JDBC連接的事務支持由Connection對象提供,且默認自動提交,即默認事務是關閉的狀態。也就是說,SQL語句執行將會立即提交至數據庫,永久生效。

JDBC中關於事務的操作:

conn.setAutoCommit(false);	//關閉自動提交,開啟事務

/*下面倆需要在開啟事務之后才能使用*/
conn.commit();				//提交事務
conn.rollback();			//回滾事務

需要注意的是:當遇到一個未處理的SQLException的異常時,系統會非正常退出,事務會自動回滾。但如果顯式捕捉該異常,則需要顯式地回滾事務。

try-with-resources

Java7增強的try語句的功能,保證那些實現Closeable接口的實現類能夠自動關閉資源,不用顯示的finally關閉資源。

細節可參考參考:JDK7的try-with-resource方式的使用

package cn.my.jdbcTransaction;

import cn.my.jdbcPra.util.JDBCUtils;

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

/**
 * @auther Summerday
 * JDBC的事務支持
 */
public class JDBCDemo {
    public static void main(String[] args) {
        //獲取連接
        try (Connection conn = JDBCUtils.getConnection()) {
            //關閉自動默認提交,開啟事務
            conn.setAutoCommit(false);
            //定義sql
            //-500
            String sql1 = "update account set balance = balance - ? where id = ?";
            //+500
            String sql2 = "update account set balance = balance + ? where id = ?";

            //執行sql對象的prs
            try (PreparedStatement prs1 = conn.prepareStatement(sql1);
                 PreparedStatement prs2 = conn.prepareStatement(sql2)) {
                //設置參數
                prs1.setDouble(1, 500);
                prs1.setInt(2, 1);

                prs2.setDouble(1, 500);
                prs2.setInt(2, 2);

                //執行sql1語句
                prs1.executeUpdate();
                //執行sql2語句
                prs2.executeUpdate();
            } catch (Exception e) {
                System.out.println("roll back");
                conn.rollback();
            }
            //提交事務
            conn.commit();
            System.out.println("commit!");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


免責聲明!

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



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