什么時(shí)候使用事務(wù)?
1、如果實(shí)際的業(yè)務(wù)中,需要將一條數(shù)據(jù)同時(shí)存放到兩張表中, 并且要求兩張表中的數(shù)據(jù)同步,那么此時(shí)就需要使用事務(wù)管理機(jī)制,保證數(shù)據(jù)同步。如果出現(xiàn)錯(cuò)誤情況,比如表一插入數(shù)據(jù)成功,表二插入數(shù)據(jù)失敗,那么就回滾,終止數(shù)據(jù)持久化操作。
2、金融行業(yè)的軟件開發(fā)嚴(yán)格重視事務(wù)處理,比如我們常見的轉(zhuǎn)賬操作,一方的賬戶金額減少,對(duì)應(yīng)的是另一方的賬戶金額增加,這個(gè)過程需要使用到事務(wù)機(jī)制,不然轉(zhuǎn)賬不能成功。
免費(fèi)學(xué)習(xí)視頻教程分享:java視頻教程
以JDBC處理事務(wù)為例:
public static void main(String[] args) throws SQLException, ClassNotFoundException { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/user"; String user = "root"; String password = "123456"; Connection con = (Connection) DriverManager.getConnection(url, user, password); try { //取消自動(dòng)提交 //如果設(shè)成false,那就是JDBC不自動(dòng)提交,需要手動(dòng)的使用commit或者rollback來(lái)進(jìn)行提交或者回滾數(shù)據(jù). con.setAutoCommit(false); Statement stmt = (Statement) con.createStatement(); //進(jìn)行數(shù)據(jù)插入 String sql = "insert into users(email,password) values('" + "jack@163.com" + "','" + "jack" + "');"; boolean flag = stmt.execute(sql); System.out.println(flag); //人為制造一個(gè)錯(cuò)誤,結(jié)果就是數(shù)據(jù)庫(kù)并沒有插入這條數(shù)據(jù),也就是數(shù)據(jù)發(fā)生了回滾 //異常被捕獲之后,就不在執(zhí)行下面的語(yǔ)句,而是執(zhí)行catch中的語(yǔ)句 //如果沒有異常,數(shù)據(jù)就會(huì)被提交到數(shù)據(jù)庫(kù) System.out.println(1/0); //手動(dòng)提交 con.commit(); } catch (Exception e) { //如果發(fā)生錯(cuò)誤,就回滾 con.rollback(); } finally { con.close(); } }
相關(guān)文章教程推薦:java入門教程