java資料庫程式設計(12)事務處理
阿新 • • 發佈:2018-12-02
- Connection是預設將executeXXX(String sql)執行之後馬上提交給資料庫的,這樣一來,有時候如果需要處理一連串的sql語句(也就是事務,這裡不講解事務的相關知識),則需要將Connection的自動提交關掉,使用的方法為setAutoCommit(false)。在將事務包含的sql語句都使用executeXXX(String sql)執行完了之後,在使用Connection的commit()方法將所有sql語句都提交到資料庫。
- 執行程式之前和執行程式之後的表
- 具體的講解穿插在程式碼中
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); } }