java代碼手動(dòng)提交事務(wù) 手動(dòng)提交事務(wù)和自動(dòng)提交

數(shù)據(jù)庫(kù)的手動(dòng)提交和自動(dòng)提交區(qū)別

一、處理方式不同

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供銅梁網(wǎng)站建設(shè)、銅梁做網(wǎng)站、銅梁網(wǎng)站設(shè)計(jì)、銅梁網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、銅梁企業(yè)網(wǎng)站模板建站服務(wù),10年銅梁做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

1、手動(dòng)提交:用顯式的方式定義其開始和結(jié)束的事務(wù),當(dāng)使用start transaction和 commit語(yǔ)句時(shí)則表示發(fā)生顯式事務(wù)。

2、自動(dòng)提交:指每一條數(shù)據(jù)操作語(yǔ)句都自動(dòng)地成為一個(gè)事務(wù),事務(wù)的開始是隱式的,事務(wù)的結(jié)束有明確的標(biāo)記。

二、特點(diǎn)不同

1、手動(dòng)提交:邏輯相關(guān)的操作分成了一個(gè)組,在數(shù)據(jù)永久改變前,可以預(yù)覽數(shù)據(jù)變化。

2、自動(dòng)提交:能夠保證數(shù)據(jù)的讀一致性。

三、處理結(jié)果不同

1、手動(dòng)提交:務(wù)被提交給了DBMS(數(shù)據(jù)庫(kù)管理系統(tǒng)),則DBMS(數(shù)據(jù)庫(kù)管理系統(tǒng))需要確保該事務(wù)中的所有操作都成功完成且其結(jié)果被永久保存在數(shù)據(jù)庫(kù)中。

2、自動(dòng)提交:事務(wù)中有的操作沒有成功完成,則事務(wù)中的所有操作都需要被回滾,回到事務(wù)執(zhí)行前的狀態(tài);同時(shí),該事務(wù)對(duì)數(shù)據(jù)庫(kù)或者其他事務(wù)的執(zhí)行無(wú)影響,所有的事務(wù)都好像在獨(dú)立的運(yùn)行。

參考資料來(lái)源:百度百科-數(shù)據(jù)庫(kù)事務(wù)

參考資料來(lái)源:百度百科-SQL數(shù)據(jù)庫(kù)

事務(wù)是什么?在java中如何手工執(zhí)行事務(wù)

事務(wù) 指作為單個(gè)邏輯工作單元執(zhí)行的一系列操作。 事務(wù)處理可以確保除非事務(wù)性單元內(nèi)的所有操作都成功完成,否則不會(huì)永久更新面向數(shù)據(jù)的資源。通過將一組相關(guān)操作組合為一個(gè)要么全部成功要么全部失敗的單元,可以簡(jiǎn)化錯(cuò)誤恢復(fù)并使應(yīng)用程序更加可靠。一個(gè)邏輯工作單元要成為事務(wù),必須滿足所謂的ACID(原子性、一致性、隔離性和持久性)屬性;

在java中你要手工執(zhí)行事務(wù),如果是jdbc連接數(shù)據(jù)庫(kù),那么就設(shè)置提交的時(shí)候手動(dòng)提交

conn.setAutoCommit(false);//conn 是connection對(duì)象

當(dāng)結(jié)束后

conn.commit();

希望對(duì)你有幫助

如何用java開啟mysql事務(wù),要求詳細(xì)

如何用java開啟mysql事務(wù),要求詳細(xì)

看你是什么事務(wù),jdbc事務(wù),還是分布式事務(wù),還是容器事務(wù)

1,編程式事務(wù)管理(jdbc的事務(wù)是綁定在connection上的)

Connection conn = null;

try

{

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection("jdbc:oracle:thin:@host:1521:SID","username","password");

conn.setAutoCommit(false); //取消自動(dòng)提交

PreparedStatement ps = conn.prepareCall("update something");

ResultSet rs = ps.executeQuery();

conn.commit(); //手動(dòng)提交

}

catch (Exception e)

{

conn.rollback();

e.printStackTrace();

}

finally

{

conn.close();

}

2,聲明式事務(wù)

先在工程的application.xml配置文件中添加如下代碼,開啟事務(wù)

!-- 聲明式事務(wù)控制配置 --

tx:annotation-driven transaction-manager="txManager"/

bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"

property name="datasource" ref="bassDataSource"/property

/bean

然后在你需要開啟事務(wù)的接口前面添加注解

@Transactional(rollbackFor = IOException.class)

public void add(String name) throws IOException

{

System.out.println("可以再類里和方法里面添加事務(wù)注解0~0");

throw new IOException();

}

直接調(diào)用接口方法就好

分布式事務(wù)處理(mysql貌似在5.X之后才支持) 的話,

1.可以直接使用spring+atomikos框架進(jìn)行管理

參考:

就不貼測(cè)試代碼了,自己看著配置吧

2,使用JTA(Java Transaction API)進(jìn)行分布式事務(wù)管理(測(cè)試代碼如下)

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import javax.naming.InitialContext;

import javax.sql.DataSource;

import javax.transaction.SystemException;

import javax.transaction.UserTransaction;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

//分布式事務(wù)處理

public class transferAccount

{

@SuppressWarnings("null")

public void testTransferAccount()

{

UserTransaction userts = null;

Connection connA = null;

PreparedStatement psA = null;

InitialContext context = null;

Connection connB = null;

PreparedStatement psB = null;

try

{

//獲得事務(wù)管理對(duì)象

userts = (UserTransaction) context.lookup("java:comp/UserTransaction");

//獲取兩個(gè)數(shù)據(jù)庫(kù)

connA = getDataSourceA().getConnection();

connB = getDataSourceB().getConnection();

//開啟事務(wù)

userts.begin();

//sql語(yǔ)句

psA = connA.prepareStatement("我加1");

psB = connB.prepareStatement("我減1");

//執(zhí)行sql

psA.executeUpdate();

psB.executeUpdate();

//事務(wù)提交

userts.commit();

} catch (Exception e)

{

try

{

userts.rollback();

} catch (IllegalStateException | SecurityException

| SystemException e1)

{

e1.printStackTrace();

}

e.printStackTrace();

}

finally

{

try

{

psA.close();

psB.close();

connA.close();

connB.close();

} catch (SQLException e)

{

e.printStackTrace();

}

}

}

public DataSource getDataSourceA()

{

MysqlDataSource dataSource = new MysqlDataSource();

dataSource.setDatabaseName("mysql");

dataSource.setServerName("server");

dataSource.setPortNumber(1433);

dataSource.setUser("test");

dataSource.setPassword("test");

return dataSource;

}

public DataSource getDataSourceB()

{

MysqlDataSource dataSource = new MysqlDataSource();

dataSource.setDatabaseName("mysql");

dataSource.setServerName("server");

dataSource.setPortNumber(1435);

dataSource.setUser("test1");

dataSource.setPassword("test1");

return dataSource;

}

}

JAVA JDBC事務(wù)提交的疑問。

啟動(dòng)事務(wù) conn.setAutoCommit();

這個(gè)不是啟動(dòng)事務(wù),而是設(shè)置事務(wù)是否自動(dòng)提交,默認(rèn)是自動(dòng)提交,如果要手動(dòng)控的話,寫成conn.setAutoCommit(false);

if(rs.next){

...執(zhí)行更新

conn.commit();

}

這個(gè)也不對(duì),RS不可能執(zhí)更新操作。只能是查詢。

如果你進(jìn)行了鎖表操作,那么如果沒有commit()或rollbak()方法,是不會(huì)進(jìn)行解鎖操作的。

下面給你些代碼段以做參考。

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); //設(shè)成非自動(dòng)提交

condition.execuQuery(conn);

condition.execuUpdate(conn);

//如果操作成功會(huì)走到這一步,進(jìn)行提交,可以解鎖

conn.commit();

}catch(SQLException){

//出現(xiàn)任何的SQL異常都可以捕捉到,進(jìn)行事務(wù)回滾,也可以解鎖。

conn.rollbak();

}

}

}

自動(dòng)默認(rèn)是回滾事務(wù)?

默認(rèn)的話,是執(zhí)行一條就進(jìn)行提交,如果錯(cuò)了會(huì)回滾。

如何手動(dòng)控制java中的事務(wù)

很簡(jiǎn)單,直接將autoCommit設(shè)置為false,就可以自己控制事務(wù)的提交和回滾!

大概是:conn.setAutoCommit(false);這個(gè)方法,然后開啟事務(wù)是:conn.beginTrainsaction();方法如有不準(zhǔn)確,希望海涵!

java我明明設(shè)置了手動(dòng)提交為什么還自動(dòng)提交呢 (事務(wù))

請(qǐng)把這個(gè)方法的代碼貼上 Connection conn=DBUtil.getConnection();

可能 service層 和 Dao層 拿到的不是同一個(gè)connection .

service產(chǎn)生connection后 應(yīng)該 以參數(shù)方式傳給Dao層。 Dao層操作完后 再在sercice層提交事務(wù)和關(guān)閉connection.

名稱欄目:java代碼手動(dòng)提交事務(wù) 手動(dòng)提交事務(wù)和自動(dòng)提交
鏈接URL:http://muchs.cn/article40/doocdho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)、微信公眾號(hào)、網(wǎng)站制作、搜索引擎優(yōu)化ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)