日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java-transaction事件

發布時間:2023/11/30 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java-transaction事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*
########事務&數據庫連接池&DBUtils

######事務

> Transaction 其實指的一組操作,里面包含許多個單一的邏輯。
只要有一個邏輯沒有執行成功,那么都算失敗。 所有的數據都回歸到最初的狀態(回滾)

####為什么要有事務?
> 為了確保邏輯的成功。 例子: 銀行的轉賬。

?

?


###使用命令行方式演示事務。

* 開啟事務
start transaction;
* 提交或者回滾事務
commit; 提交事務, 數據將會寫到磁盤上的數據庫
rollback ; 數據回滾,回到最初的狀態。

1. 關閉自動提交功能。



2. 演示事務

?

#####使用代碼方式演示事務

> 代碼里面的事務,主要是針對連接來的。
>
>
> 1. 通過conn.setAutoCommit(false )來關閉自動提交的設置。

> 2. 提交事務 conn.commit();

> 3. 回滾事務 conn.rollback();
//注意當數據庫不支持回滾的時候有如下原因
* 1.數據庫引擎不是innodb 而是myisam,不支持事務回滾。
* 2.在rollback之前 已經通過connection.commit 提交改動 無法回滾
* 3.mysql默認create drop alter 等涉及到表修改,會隱式結束當前會話中的任何活動事務,直接提交,無法回滾。

@Test
public void testTransaction(){

Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JDBCUtil.getConn();

//連接,事務默認就是自動提交的。 關閉自動提交。
conn.setAutoCommit(false);

String sql = "update account set money = money - ? where id = ?";
ps = conn.prepareStatement(sql);

//扣錢, 扣ID為1 的100塊錢
ps.setInt(1, 100);
ps.setInt(2, 1);
ps.executeUpdate();


int a = 10 /0 ;

//加錢, 給ID為2 加100塊錢
ps.setInt(1, -100);
ps.setInt(2, 2);
ps.executeUpdate();

//成功: 提交事務。
conn.commit();

} catch (SQLException e) {
try {
//事變: 回滾事務
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();

}finally {
JDBCUtil.release(conn, ps, rs);
}
}

###事務的特性

* 原子性
> 指的是 事務中包含的邏輯,不可分割。

* 一致性
> 指的是 事務執行前后。數據完整性

* 隔離性
> 指的是 事務在執行期間不應該受到其他事務的影響

* 持久性
> 指的是 事務執行成功,那么數據應該持久保存到磁盤上。


###事務的安全隱患
> 不考慮隔離級別設置,那么會出現以下問題。

* 讀
> 臟讀 不可重讀讀 幻讀.
* 臟讀
> 一個事務讀到另外一個事務還未提交的數據

* 不可重復讀
> 一個事務讀到了另外一個事務提交的數據 ,造成了前后兩次查詢結果不一致。


####讀未提交 演示
1. 設置A窗口的隔離級別為 讀未提交

2. 兩個窗口都分別開啟事務

* 寫
> 丟失更新

?

#### 讀已提交演示
1. 設置A窗口的隔離級別為 讀已提交

2. A B 兩個窗口都開啟事務, 在B窗口執行更新操作。

3. 在A窗口執行的查詢結果不一致。 一次是在B窗口提交事務之前,一次是在B窗口提交事務之后。

> 這個隔離級別能夠屏蔽 臟讀的現象, 但是引發了另一個問題 ,不可重復讀。


###可串行化
> 如果有一個連接的隔離級別設置為了串行化 ,那么誰先打開了事務, 誰就有了先執行的權利, 誰后打開事務,誰就只能得著,等前面的那個事務,提交或者回滾后,才能執行。 但是這種隔離級別一般比較少用。 容易造成性能上的問題。 效率比較低。

* 按效率劃分,從高到低
> 讀未提交 > 讀已提交 > 可重復讀 > 可串行化

* 按攔截程度 ,從高到底
> 可串行化 > 可重復讀 > 讀已提交 > 讀未提交


##事務總結

###需要掌握的
1. 在代碼里面會使用事務
conn.setAutoCommit(false);
conn.commit();
conn.rollback();

2. 事務只是針對連接連接對象,如果再開一個連接對象,那么那是默認的提交。

3. 事務是會自動提交的。


###需要了解的

####安全隱患

臟讀
一個事務讀到了另一個事務未提交的數據
不可重復讀
一個事務讀到了另一個事務已提交的數據,造成前后兩次查詢結果不一致
幻讀
一個事務讀到了另一個事務insert的數據 ,造成前后查詢結果不一致 。


丟失更新。

####隔離級別

讀未提交
> 引發問題: 臟讀

讀已提交
> 解決: 臟讀 , 引發: 不可重復讀

可重復讀
> 解決: 臟讀 、 不可重復讀 , 未解決: 幻讀

可串行化
> 解決: 臟讀、 不可重復讀 、 幻讀。

mySql 默認的隔離級別是 可重復讀
Oracle 默認的隔離級別是 讀已提交


###丟失更新


###解決丟失更新
* 悲觀鎖

> 可以在查詢的時候,加入 for update
數據庫的鎖的機制,排他鎖

* 樂觀鎖
> 要求程序員自己控制。


select @@tx_isolation查看現在的隔離級別(數據庫)
set session transaction isolation level read XXX;修改隔離等級(數據庫)
XXXX參數:uncommitted 讀未提交
committed 讀已經提交
read 重復度
serializable 可串行化
*/

?

數據庫連接代碼:

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;public class ConnLink { //數據庫的連接部分public String jdbc_driver="com.mysql.jdbc.Driver";public String jdbc_conn="jdbc:mysql://localhost:3306/test";public String user="root";public String pass="root";//返回連接函數的部分public Connection getConn() throws SQLException, ClassNotFoundException{//1.注冊驅動 Class.forName(jdbc_driver);//2.獲取連接Connection connection=DriverManager.getConnection(jdbc_conn,user,pass);return connection;}//釋放連接資源的部分public void relese(Connection conn,PreparedStatement pstmt) throws SQLException{if(pstmt!=null) pstmt.close();if(conn!=null) conn.close();} }

?

?

演示代碼:

import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.jsp.tagext.TryCatchFinally;public class Transaction {static ConnLink connlink=new ConnLink();public static void main(String[] args) throws SQLException, ClassNotFoundException {Connection conn=null;PreparedStatement pstmt=null; try {//獲取數據庫的連接conn=connlink.getConn();//連接,事務默認就是自動提交的。 關閉自動提交。conn.setAutoCommit(false);//創建執行sql語句的對象3 書寫sql語句;String sqlString="update blank set money = money - ? where id = ?";//創建預處理對象pstmt = conn.prepareStatement(sqlString);//設置參數占位符pstmt.setInt(1, 100);pstmt.setInt(2,1); //執行語句 pstmt.executeUpdate();//以上部分是給用戶1扣100元,我們可以理解是用戶1給用戶2轉賬100元。所以下面要給用戶2增加100元//在此處設置一個錯誤,促使數據庫的事件回滾int a=10/0;String sqlString2="update blank set money = money + ? where id = ?";pstmt = conn.prepareStatement(sqlString2);pstmt.setInt(1, 100);pstmt.setInt(2,2); pstmt.executeUpdate();//由于上面的conn.setAutoCommit(false);設置成了flase所以此處需要用commit()進行提交 conn.commit();} catch (SQLException e) {// TODO: handle exception//這里是出現意外的情況就是轉賬失敗,那么怎么辦呢,直接取消所有的操作,實現數據庫的回滾。 conn.rollback();e.printStackTrace();}finally{connlink.relese(conn, pstmt);}} }

?

轉載于:https://www.cnblogs.com/byczyz/p/11343280.html

總結

以上是生活随笔為你收集整理的java-transaction事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产97av | 福利91 | 操操操干干干 | 成人精品视频在线播放 | 五月天国产 | 激情青青草 | 无套中出丰满人妻无码 | 日本熟妇浓毛 | 视频在线观看你懂的 | 欧美三区在线 | 精品二区在线观看 | 欧美激情视频一区二区三区在线播放 | 国产精品专区在线观看 | 国产三级在线观看 | 日韩欧美国产一区二区 | 亚洲国语 | 亚洲av男人的天堂在线观看 | 亚洲一区二区在线观看视频 | 成色网| 日本三级吃奶头添泬无码苍井空 | 精品人妻一区二区三区蜜桃 | 欧美大胆a| 动漫av在线 | 麻豆人妻少妇精品无码专区 | 日韩成人免费 | 少妇伦子伦精品无吗 | 久久亚洲成人av | 最新地址在线观看 | 国产美女主播在线 | 中文字幕毛片 | 成人啪啪18免费游戏链接 | 91浏览器在线观看 | 九九热在线观看视频 | 亚洲av无码国产综合专区 | 91精品视频在线 | 亚洲激情欧美 | 在线免费看黄网站 | 亚洲在线视频一区 | 欧洲视频一区二区三区 | 性a视频 | 国产日韩视频 | 一本色道av | 噜噜噜久久,亚洲精品国产品 | 色久综合 | 国产精品久久久久久久 | 国产精品亚洲二区在线观看 | 日韩中出| 国产一区在线观看视频 | 欧美成人午夜视频 | 日韩中文字幕在线播放 | 日本一级淫片免费放 | 久操视频在线播放 | 国产偷拍一区二区 | 无毒黄色网址 | 国产美女久久久久 | 国产男女猛烈无遮挡免费观看网站 | 性色视频在线观看 | 色悠悠网址| 97caoporn| av在线播放一区二区三区 | 国产伦理精品 | 一级淫片免费 | 在线se| 欧美极品少妇xxxxⅹ裸体艺术 | 91精品一区二区三区综合在线爱 | 亚洲欧洲日本一区二区三区 | 欧美亚洲国产精品 | 邻居少妇张开双腿让我爽一夜 | 成人av久久| 看黄色网址 | 国产男男一区二区三区 | 超碰碰碰 | 丁香婷婷在线 | 欧美日韩午夜 | 九九福利视频 | 欧美日韩一区二区三区不卡视频 | 韩国理论午夜 | 国产福利视频一区 | 国产伦理一区二区 | 欧美激情图片 | 中文字幕永久视频 | 97视频在线免费观看 | 亚洲三级网站 | 免费看成人啪啪 | 刘亦菲一区二区三区免费看 | 高清国产午夜精品久久久久久 | 欧美日本韩国在线 | 亚洲成人不卡 | 亚洲精品国产精品乱码 | 国产精品老熟女一区二区 | a v视频在线观看 | 九热在线视频 | 综合网色 | 中文字幕在线播放日韩 | 动漫美女被吸乳奶动漫视频 | 草草草在线观看 | 国产成人精品一区在线播放 | 亚洲视频一区二区三区四区 | 亚洲色图图片区 |