1. 程式人生 > >java資料庫程式設計(12)事務處理

java資料庫程式設計(12)事務處理

  1. Connection是預設將executeXXX(String sql)執行之後馬上提交給資料庫的,這樣一來,有時候如果需要處理一連串的sql語句(也就是事務,這裡不講解事務的相關知識),則需要將Connection的自動提交關掉,使用的方法為setAutoCommit(false)。在將事務包含的sql語句都使用executeXXX(String sql)執行完了之後,在使用Connection的commit()方法將所有sql語句都提交到資料庫。
  2. 執行程式之前和執行程式之後的表
  3. 具體的講解穿插在程式碼中
    import java.io.FileInputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class TransactionTest {
    //    常規操作
        private String driver;
        private String url;
        private String user;
        private String pass;
    
        public void initparam(String fileName)throws Exception{
            Properties prop = new Properties();
            prop.load(new FileInputStream(fileName));
            driver =  prop.getProperty("driver");
            url =  prop.getProperty("url");
            user =  prop.getProperty("user");
            pass = prop.getProperty("pass");
        }
    
        public void inserInTransaction(String [] sqls) throws Exception{
            Class.forName(driver);
            try(Connection conn = DriverManager.getConnection(url, user, pass)){
    
                conn.setAutoCommit(false);
    //            將connection的自動提交關掉
    
                try(
                        Statement stmt = conn.createStatement())
                {
                    for (String sql : sqls){
                        stmt.executeUpdate(sql);
                    }
                }
    
                conn.commit();
    //            在這裡顯示地提交
    
            }
        }
    
        public static void main(String args[]) throws  Exception{
            TransactionTest tt = new TransactionTest();
            tt.initparam("mysql.ini");
            String[] sqls = new String[]{
                    "insert into students values('S1', 'lala', 'f', 21, 'D01')",
                    "insert into students values('S5', 'lblb', 'm', 21, 'D01')",
                    "insert into students values('S6', 'lclc', 'f', 21, 'D01')",
            };
            tt.inserInTransaction(sqls);
        }
    }