亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我必須在交易中放置 PreparedStatament

我必須在交易中放置 PreparedStatament

森林海 2021-06-07 06:11:09
假設我想在兩個不同的表中保存刪除兩個元素,所以我必須創建事務。我的問題是我必須把PreparedStatement元素放在哪里?我必須這樣說(我的意思是在交易中)connection_database.setAutoCommit(false);connection_database.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);PreparedStatement p1.......PreparedStatement p2;p1.execute();p2.execute();connessione_db.commit();connessione_db.setAutoCommit(true);或者我可以這樣說嗎?PreparedStatement p1.......PreparedStatement p2;connection_database.setAutoCommit(false);connection_database.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);p1.execute();p2.execute();connessione_db.commit();connessione_db.setAutoCommit(true);第一種方式PreparedStatement在交易中創建第二種方式創建PreparedStatement是出交易。任何人都可以幫助我嗎?
查看完整描述

2 回答

?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

在符合標準的 JDBC 實現中,您可以使用任一順序:準備好的語句的生命周期比事務長,并且在事務提交后應該可以重用。

但是,在準備語句之前首先禁用自動提交可能更有效,具體取決于驅動程序和數據庫系統。這可能取決于驅動程序在準備語句時是否需要事務。如果驅動程序在準備時需要一個事務,那么在準備這兩個語句的過程中,在準備之后禁用自動提交可能已經啟動(并提交)了一兩個事務,但是如果您在禁用自動提交之后準備它們,準備可能會使用與隨后用于實際執行的相同事務。


查看完整回答
反對 回復 2021-06-10
?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

語句對象可以共享,也可以緩存。所以你提供的代碼沒有問題。只要確保它們被放在 try catch 塊中,所以如果不成功,它將被回滾。

如果不成功,平面事務將回滾,就像您的情況一樣。嵌套事務從一個點提交到另一個點,因此只能部分回滾。您可以使用第二段代碼。無需使事務可序列化,嘗試根據您是進行讀取還是寫入以及您的要求根據時間戳鎖定。


查看完整回答
反對 回復 2021-06-10
  • 2 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號