事務


JDBC程序中當一個連接對象被創建時,默認情況下是自動提交事務:每執行一個SQL語句時,如果執行成功,就會向數據庫自動提交而不能回滾。

JDBC事務為了讓多個SQL語句作為一個事務被執行,手動設置提交事務與結束事務方法:

調用Connection對象的setAutoCommit(false);//取消自動提交事務

在所有SQL語句執行成功后,使用Connection對象的commit()方法提交事務

若中途出現某個SQL語句執行不成功,則使用Connection對象的Rollback()方法回滾事務//可以使用try/catch/finally判斷事務是否提交還是回滾

若Connection沒有關閉,則需要恢復自動提交事務狀態:setAutoCommit(true)

/*

*將一個轉賬操作SQL語句使用手動事務提交方式

*/

 

//讀取配置文件參數信息

Properties properties=new Properties();

properties.load(new File("jdbc.properties"));

String driver=properties.getProperty("driver");

String url=properties.getProperty("url");

String user=properties.getProperty("user");

String pas=properties.getProperty("password");

//創建驅動

Class.forName(driver);

//驅動連接

Connection connection=DriverManager.getConnection(url,user,pas);

PreparedStatement statement=null;

 

try{

  //取消事務自動提交

  connection.setAutoCommit(false);

  //編寫並執行SQL語句

  String sql=“update Account set balance=? where username=?”;

 

  statement=new PreparedStatement(sql);

  statement.setDouble(1,10000);//剩余金額為10000

  statement.setString(2,"tom");//轉賬人姓名

  statement.executeUpdate();//執行轉賬sql操作

  statement.setDouble(1,30000);//剩余金額為30000

  statement.setString(2,"tony");//轉賬人姓名

  statement.executeUpdate();//執行被轉帳sql操作

  //若無異常,則事務成功提交

  connection.commit()

}catch(Exception e){

  connection.Rollback();//若產生異常,則事務回滾

}finally{//最后一定執行關閉連接

  statement.close();connection.close();

}


免責聲明!

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



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