java数据库编程(12)事务处理

  1. Connection是默认将executeXXX(String sql)执行之后马上提交给数据库的,这样一来,有时候如果需要处理一连串的sql语句(也就是事务,这里不讲解事务的相关知识),则需要将Connection的自动提交关掉,使用的方法为setAutoCommit(false)。在将事务包含的sql语句都使用executeXXX(String sql)执行完了之后,在使用Connection的commit()方法将所有sql语句都提交到数据库。
  2. 执行程序之前和执行程序之后的表java数据库编程(12)事务处理_第1张图片
  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);
        }
    }
    

    这是我看李刚编著的《疯狂Java讲义》后总结出来的。

你可能感兴趣的:(java)