国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
java sql 關(guān)于事務(wù)操作的簡介
本文介紹在Java中進(jìn)行事務(wù)處理的方法,通過實例分別講述了如何采用JavaBean、Ejb組件實現(xiàn)J2EE應(yīng)用服務(wù)器支持的JDBC事務(wù)、JTA(Java Tran

本文介紹在Java中進(jìn)行事務(wù)處理的方法,通過實例分別講述了如何采用JavaBean、Ejb組件實現(xiàn)J2EE應(yīng)用服務(wù)器支持的JDBC事務(wù)、JTA(Java Transaction API)事務(wù)

Java中的事務(wù)處理

  一般情況下,J2EE應(yīng)用服務(wù)器支持JDBC事務(wù)、JTA(Java Transaction API)事務(wù)、容器管理事務(wù)。一般情況下,最好不要在程序中同時使用上述三種事務(wù)類型,比如在JTA事務(wù)中嵌套JDBC事務(wù)。第二方面,事務(wù)要在盡可能短的時間內(nèi)完成,不要在不同方法中實現(xiàn)事務(wù)的使用。下面我們列舉兩種事務(wù)處理方式。

  1、JavaBean中使用JDBC方式進(jìn)行事務(wù)處理
  在JDBC中怎樣將多個SQL語句組合成一個事務(wù)呢?在JDBC中,打開一個連接對象Connection時,缺省是auto-commit模式,每個SQL語句都被當(dāng)作一個事務(wù),即每次執(zhí)行一個語句,都會自動的得到事務(wù)確認(rèn)。為了能將多個SQL語句組合成一個事務(wù),要將auto-commit模式屏蔽掉。在auto-commit模式屏蔽掉之后,如果不調(diào)用commit()方法,SQL語句不會得到事務(wù)確認(rèn)。在最近一次commit()方法調(diào)用之后的所有SQL會在方法commit()調(diào)用時得到確認(rèn)。

public int delete(int sID) {
 dbc = new DataBaseConnection();
 Connection con = dbc.getConnection();
 try {
  con.setAutoCommit(false);// 更改JDBC事務(wù)的默認(rèn)提交方式
  dbc.executeUpdate("delete from bylaw where ID=" + sID);
  dbc.executeUpdate("delete from bylaw _content where ID=" + sID);
  dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID);
  con.commit();//提交JDBC事務(wù)
  con.setAutoCommit(true);// 恢復(fù)JDBC事務(wù)的默認(rèn)提交方式
  dbc.close();
  return 1;
 }
 catch (Exception exc) {
  con.rollBack();//回滾JDBC事務(wù)
  exc.printStackTrace();
  dbc.close();
  return -1;
 }
}

  2、SessionBean中的JTA事務(wù)
  JTA 是事務(wù)服務(wù)的 J2EE 解決方案。本質(zhì)上,它是描述事務(wù)接口(比如 UserTransaction 接口,開發(fā)人員直接使用該接口或者通過 J2EE 容器使用該接口來確保業(yè)務(wù)邏輯能夠可靠地運行)的 J2EE 模型的一部分。JTA 具有的三個主要的接口分別是 UserTransaction 接口、TransactionManager 接口和 Transaction 接口。這些接口共享公共的事務(wù)操作,例如 commit() 和 rollback(), 但是也包含特殊的事務(wù)操作,例如 suspend(),resume() 和 enlist(),它們只出現(xiàn)在特定的接口上,以便在實現(xiàn)中允許一定程度的訪問控制。例如,UserTransaction 能夠執(zhí)行事務(wù)劃分和基本的事務(wù)操作,而 TransactionManager 能夠執(zhí)行上下文管理。

  應(yīng)用程序可以調(diào)用UserTransaction.begin()方法開始一個事務(wù),該事務(wù)與應(yīng)用程序正在其中運行的當(dāng)前線程相關(guān)聯(lián)。底層的事務(wù)管理器實際處理線程與事務(wù)之間的關(guān)聯(lián)。UserTransaction.commit()方法終止與當(dāng)前線程關(guān)聯(lián)的事務(wù)。UserTransaction.rollback()方法將放棄與當(dāng)前線程關(guān)聯(lián)的當(dāng)前事務(wù)。

public int delete(int sID) {
 DataBaseConnection dbc = null;
 dbc = new DataBaseConnection();
 dbc.getConnection();
 UserTransaction transaction = sessionContext.getUserTransaction();//獲得JTA事務(wù)
 try {
  transaction.begin(); //開始JTA事務(wù)
  dbc.executeUpdate("delete from bylaw where ID=" + sID);
  dbc.executeUpdate("delete from bylaw _content where ID=" + sID);
  dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID);
  transaction.commit(); //提交JTA事務(wù)
  dbc.close();
  return 1;
 }
 catch (Exception exc) {
  try {
   transaction.rollback();//JTA事務(wù)回滾
  }
  catch (Exception ex) {
   //JTA事務(wù)回滾出錯處理
   ex.printStackTrace();
  }
  exc.printStackTrace();
  dbc.close();
  return -1;
 }
}
(二)事務(wù)簡單例子

BEGIN TRANSACTION DeleteSupv
    --SQL語句
    IF @@error<>0
BEGIN
        ROLLBACK TRAN DeleteSupv
   GOTO on_error
END
    --SQL語句
    IF @@error<>0
BEGIN
        ROLLBACK TRAN DeleteSupv
   GOTO on_error
END
COMMIT TRAN DeleteSupv

RETURN 1
on_error:
    print 'Error occured'

(三)

最近研了一下java的事務(wù)處理,原來是這么一回事,如果對數(shù)據(jù)庫進(jìn)行多次操作,每一次的執(zhí)行或步驟都是一個事務(wù).如果數(shù)據(jù)庫操作在某一步?jīng)]有執(zhí)行或出現(xiàn)異常而導(dǎo)致事務(wù)失敗,這樣有的事務(wù)被執(zhí)行有的就沒有被執(zhí)行,從而就有了事務(wù)的回滾,取消先前的操作.....

JavaBean中使用JDBC方式進(jìn)行事務(wù)處理

public int delete(int sID) {
dbc = new DataBaseConnection();
Connection con = dbc.getConnection();
try {
con.setAutoCommit(false);// 更改JDBC事務(wù)的默認(rèn)提交方式
dbc.executeUpdate("delete from xiao where ID=" + sID);
dbc.executeUpdate("delete from xiao_content where ID=" + sID);
dbc.executeUpdate("delete from xiao_affix where bylawid=" + sID);
con.commit();//提交JDBC事務(wù)
con.setAutoCommit(true);// 恢復(fù)JDBC事務(wù)的默認(rèn)提交方式
dbc.close();
return 1;
}
catch (Exception exc) {
con.rollBack();//回滾JDBC事務(wù)
exc.printStackTrace();
dbc.close();
return -1;
}
}

     在數(shù)據(jù)庫操作中,一項事務(wù)是指由一條或多條對數(shù)據(jù)庫更新的sql語句所組成的一個不可分割的工作單元。只有當(dāng)事務(wù)中的所有操作都正常完成了,整個事務(wù)才能被提交到數(shù)據(jù)庫,如果有一項操作沒有完成,就必須撤消整個事務(wù)。


例如在銀行的轉(zhuǎn)帳事務(wù)中,假定張三從自己的賬號上把1000元轉(zhuǎn)到李四的賬號上,相關(guān)的sql語句如下:

update account set monery=monery-1000 where name='zhangsan'

update account set monery=monery+1000 where name='lisi'

這個兩條語句必須作為一個完成的事務(wù)來處理。只有當(dāng)兩條都成功執(zhí)行了,才能提交這個事務(wù)。如果有一句失敗,整個事務(wù)必須撤消。


在connection類中提供了3個控制事務(wù)的方法:

(1) setAutoCommit(Boolean autoCommit):設(shè)置是否自動提交事務(wù);

(2) commit();提交事務(wù);

(3) rollback();撤消事務(wù);

在jdbc api中,默認(rèn)的情況為自動提交事務(wù),也就是說,每一條對數(shù)據(jù)庫的更新的sql語句代表一項事務(wù),操作成功后,系統(tǒng)自動調(diào)用commit()來提交,否則將調(diào)用rollback()來撤消事務(wù)。

在jdbc api中,可以通過調(diào)用setAutoCommit(false) 來禁止自動提交事務(wù)。然后就可以把多條更新數(shù)據(jù)庫的sql語句做為一個事務(wù),在所有操作完成之后,調(diào)用commit()來進(jìn)行整體提交。倘若其中一項 sql操作失敗,就不會執(zhí)行commit()方法,而是產(chǎn)生相應(yīng)的sqlexception,此時就可以捕獲異常代碼塊中調(diào)用rollback()方法撤 消事務(wù)。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Java 事務(wù) API(JTA)
java_JDBC編程
事務(wù)管理 Transaction Management
Java事務(wù)處理總結(jié)
8.oracle中事務(wù)處理 - taeky -- Java Web技術(shù) - JavaEye...
javaweb事務(wù)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服