當前位置:首頁 » 編程語言 » java事務提交

java事務提交

發布時間: 2022-07-06 21:54:48

㈠ 請問各位java高手,spring mvc 事務提交無法回滾的問題如何解決啊

正常啊,service層就是用來管理事務的
如果service層沒有拋異常,則事務提交
如果拋出異常,則spring會回滾事務
這個就是spring
aop

㈡ 事務的提交和回滾是什麼意思 Java

一組業務整體處理的行為叫一個事務。這一組的業務都能成功處理,我們就可以把這個事務提交來保存你已做的行為結果。但如果一組中有任何的差錯出現的話,我們就認為這事務不成功,需要回滾來撤消之前的操作。舉例:你去銀行轉賬,轉賬我們有兩步吧,從你賬戶中取出錢再往他賬戶中加錢。那這兩步銀行是必須要確保正確無誤的進行的。要被看做成一個事務。其中任何一步出錯就算是轉賬失敗,但可能你這時是已經從你賬戶中扣了錢了,又沒往他賬戶里加錢?怎麼辦算了?你不肯吧。所以銀行會事務回滾,不保存你剛才的操作,即恢復到你沒轉賬之前的狀態。累啊

㈢ java我明明設置了手動提交為什麼還自動提交呢 (事務)

請把這個方法的代碼貼上 Connection conn=DBUtil.getConnection();
可能 service層 和 Dao層 拿到的不是同一個connection .
service產生connection後 應該 以參數方式傳給Dao層。 Dao層操作完後 再在sercice層提交事務和關閉connection.

㈣ java中的事務

如果你用Spring框架,Spring中可以實現事務管理,在spring 配置文件中配置事務管理器,也可以使用Spring註解式事務,在方法上加上@Transactional註解。
@Transactional
public void save() {
//你的代碼邏輯

}
如果沒有使用Spring框架,可以用JDBC處理事務,如下:
try{
con.setAutoCommit(false);//開啟事務 ......
con.commit();//try的最後提交事務
} catch() {
con.rollback();//回滾事務
}

㈤ 在java中,事務是什麼有什麼用!

一、什麼是Java事務
通常的觀念認為,事務僅與資料庫相關。
事務必須服從ISO/IEC所制定的ACID原則。ACID是原子性(atomicity)、一致性(consistency)、隔離性
(isolation)和持久性(rability)的縮寫。事務的原子性表示事務執行過程中的任何失敗都將導致事務所做的任何修改失效。一致性表示

當事務執行失敗時,所有被該事務影響的數據都應該恢復到事務執行前的狀態。隔離性表示在事務執行過程中對數據的修改,在事務提交之前對其他事務不可見。持
久性表示已提交的數據在事務執行失敗時,數據的狀態都應該正確。
通俗的理解,事務是一組原子操作單元,從資料庫角度說,就是一組sql指令,要麼全部執行成功,若因為某個原因其中一條指令執行有錯誤,則撤銷先前執行過的所有指令。更簡答的說就是:要麼全部執行成功,要麼撤銷不執行。
既然事務的概念從資料庫而來,那Java事務是什麼?之間有什麼聯系?
實際上,一個Java應用系統,如果要操作資料庫,則通過JDBC來實現的。增加、修改、刪除都是通過相應方法間接來實現的,事務的控制也相應轉移到Java程序代碼中。因此,資料庫操作的事務習慣上就稱為Java事務。
二、為什麼需要事務
事務是為解決數據安全操作提出的,事務控制實際上就是控制數據的安全訪問。具一個簡單例子:比如銀行轉帳業務,賬戶A要將自己賬戶上的1000元
轉到B賬戶下面,A賬戶余額首先要減去1000元,然後B賬戶要增加1000元。假如在中間網路出現了問題,A賬戶減去1000元已經結束,B因為網路中

斷而操作失敗,那麼整個業務失敗,必須做出控制,要求A賬戶轉帳業務撤銷。這才能保證業務的正確性,完成這個操走就需要事務,將A賬戶資金減少和B賬戶資
金增加方到一個事務裡面,要麼全部執行成功,要麼操作全部撤銷,這樣就保持了數據的安全性。
三、Java事務的類型
Java事務的類型有三種:JDBC事務、JTA(Java Transaction API)事務、容器事務。
1、JDBC事務
JDBC 事務是用 Connection 對象控制的。JDBC Connection 介面( java.sql.Connection )提供了兩種事務模式:自動提交和手工提交。 java.sql.Connection 提供了以下控制事務的方法:
public void setAutoCommit(boolean)
public boolean getAutoCommit()
public void commit()
public void rollback()
使用 JDBC 事務界定時,您可以將多個 SQL 語句結合到一個事務中。JDBC 事務的一個缺點是事務的范圍局限於一個資料庫連接。一個 JDBC 事務不能跨越多個資料庫。
2、JTA(Java Transaction API)事務
JTA是一種高層的,與實現無關的,與協議無關的API,應用程序和應用伺服器可以使用JTA來訪問事務。
JTA允許應用程序執行分布式事務處理–在兩個或多個網路計算機資源上訪問並且更新數據,這些數據可以分布在多個資料庫上。JDBC驅動程序的JTA支持極大地增強了數據訪問能力。
如果計劃用 JTA 界定事務,那麼就需要有一個實現 javax.sql.XADataSource 、
javax.sql.XAConnection 和 javax.sql.XAResource 介面的 JDBC
驅動程序。一個實現了這些介面的驅動程序將可以參與 JTA 事務。一個 XADataSource 對象就是一個 XAConnection
對象的工廠。 XAConnection s 是參與 JTA 事務的 JDBC 連接。
您將需要用應用伺服器的管理工具設置 XADataSource 。從應用伺服器和 JDBC 驅動程序的文檔中可以了解到相關的指導。
J2EE 應用程序用 JNDI 查詢數據源。一旦應用程序找到了數據源對象,它就調用 javax.sql.DataSource.getConnection() 以獲得到資料庫的連接。
XA 連接與非 XA 連接不同。一定要記住 XA 連接參與了 JTA 事務。這意味著 XA 連接不支持 JDBC
的自動提交功能。同時,應用程序一定不要對 XA 連接調用 java.sql.Connection.commit() 或者
java.sql.Connection.rollback() 。相反,應用程序應該使用 UserTransaction.begin()、
UserTransaction.commit() 和 serTransaction.rollback() 。
3、容器事務
容器事務主要是J2EE應用伺服器提供的,容器事務大多是基於JTA完成,這是一個基於JNDI的,相當復雜的API實現。相對編碼實現JTA事
務管理,我們可以通過EJB容器提供的容器事務管理機制(CMT)完成同一個功能,這項功能由J2EE應用伺服器提供。這使得我們可以簡單的指定將哪個方
法加入事務,一旦指定,容器將負責事務管理任務。這是我們土建的解決方式,因為通過這種方式我們可以將事務代碼排除在邏輯編碼之外,同時將所有困難交給
J2EE容器去解決。使用EJB CMT的另外一個好處就是程序員無需關心JTA API的編碼,不過,理論上我們必須使用EJB。
四、三種事務差異
1、JDBC事務控制的局限性在一個資料庫連接內,但是其使用簡單。
2、JTA事務的功能強大,事務可以跨越多個資料庫或多個DAO,使用也比較復雜。
3、容器事務,主要指的是J2EE應用伺服器提供的事務管理,局限於EJB應用使用。
五、總結
事務控制是構建J2EE應用不可缺少的一部分,合理選擇應用何種事務對整個應用系統來說至關重要。一般說來,在單個JDBC
連接連接的情況下可以選擇JDBC事務,在跨多個連接或者資料庫情況下,需要選擇使用JTA事務,如果用到了EJB,則可以考慮使用EJB容器事務。

如果滿意請及時採納,謝謝~

㈥ java中的事務到底怎麼理解舉個實際的例子

比如說你去銀行轉賬,將將 A 賬戶中的金額轉到B賬戶。

A 語句:update Table set amount = amount - 100 where id = 'A'"

B語句:update Table set amount = amount + 100 where id = 'B'"

會有兩條update語句,如果不用事務處理的話,在A語句執行完之後,在執行B語句的時候出錯,那麼A賬戶的金額減少了,B賬戶的金額卻沒有增加,這就有問題了
所以要用到事務來控制,如果B語句出現錯誤,就將事務回滾,A賬戶的金額也不會減少。
如果A。B都執行成功,事務提交
簡單來說就是所有在事務中的語句必須全部執行成功,事務才會提交,如果有一條執行失敗,事務就會回滾。

㈦ 在Java中事物的提交和回滾是什麼意思

向資料庫提交數據或修改數據,如果你覺得沒有問題,就可以提交,如果其中有一個環節出錯了,就可以設置回滾,可以根據判斷進行回滾,不是非要出異常了才回滾,如何回滾如何提交要看你的業務邏輯。

㈧ Java的 事務怎麼同時向資料庫的多個表提交數據

增刪改,這些對資料庫的操作,先保存到緩存里,當commit之後,真正在資料庫執行

㈨ JAVA JDBC事務提交的疑問。

>>啟動事務 conn.setAutoCommit();
這個不是啟動事務,而是設置事務是否自動提交,默認是自動提交,如果要手動控的話,寫成conn.setAutoCommit(false);

if(rs.next){
>>> ...執行更新
conn.commit();
}

這個也不對,RS不可能執更新操作。只能是查詢。

如果你進行了鎖表操作,那麼如果沒有commit()或rollbak()方法,是不會進行解鎖操作的。
下面給你些代碼段以做參考。

public class SQLCondition{
public ResultSet execuQuery(Connection conn) throws SQLException{
檢索操作.......
}
public int execuUpdate(Connection conn) throws SQLException{
更新操作.......
}
}

public class DBAccess(){
public void execute(){
SQLCondition condition = .....;
Connection conn = .....;
try{
conn.setAutoCommit(false); //設成非自動提交
condition.execuQuery(conn);
condition.execuUpdate(conn);
//如果操作成功會走到這一步,進行提交,可以解鎖
conn.commit();
}catch(SQLException){
//出現任何的SQL異常都可以捕捉到,進行事務回滾,也可以解鎖。
conn.rollbak();
}
}
}

>>自動默認是回滾事務?
默認的話,是執行一條就進行提交,如果錯了會回滾。

㈩ java SSH中 spring的事務是在什麼時候提交的

1、配置文件 applicationContext.xml:

<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"/>
2、在需要加事務的方法上加上
DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) ctx
.getBean("txManager");
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔離級別,開啟新事務,這樣會比較安全些。
TransactionStatus status = transactionManager.getTransaction(def); // 獲得事務狀態
try {
//邏輯代碼,可以寫上你的邏輯處理代碼
transactionManager.commit(status);
} catch (Exception e) {
transactionManager.rollback(status);
}

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:433
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:744
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:537
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:147
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:240
java駝峰 發布:2025-02-02 09:13:26 瀏覽:652
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:538
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726