程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle事務處理及實例演示jdbc操作批量刪除

oracle事務處理及實例演示jdbc操作批量刪除

編輯:Oracle教程

oracle事務處理及實例演示jdbc操作批量刪除


事務

作為邏輯處理的基本單位,對於數據庫操作來說由一條或者多條sql語句來構成。當然還有針對非數據庫操作的,如在計算機中設置的還原點即是一個很好的應用。

對於事務的基本性質在另一篇中有所敘述:SQL 事務及實例演示

oracle和sql server在事務上區別

sql server中的事務一般分為隱式事務、顯式事務、自動提交事務。

自動事務:對於sql server來說,當客戶端提交一條sql語句時,這時候sql server都會自動啟動一個事務;對於這樣的事務,在執行完sql語句後會自動提交。

顯示事務:這也是比較常見的使用的事務;其實實質上也就是在自動事務上,增加一個Begintran,conn.commit,end tran.

隱式事務:相比顯示事務需要開啟connection,隱式事務是默認開啟事務的Begin和數據庫連接的。當然後面還是要進行commit或rollback操作的。

而oracle的事務就沒有這麼如此豐富了,和sql server的隱式事務類似;無需開啟conn和Begin,只要在後續操作進行commit或rollback操作。

事務提交的機制

先了解一些基礎的概念,data buffer cache:相當於一塊連接硬盤文件和oracle數據操作的高速只讀緩存。

SGA:在啟動oracle實例後,在內存中開辟的一塊內存空間,用於存放服務器的控制信息以及數據。

數據塊:數據存儲的基本單位。

當連接到數據庫後,oracle為連接的用戶創建獨立的進程-影子進程,這個進程伴隨用戶的整個操作;

1.檢查數據塊

2.構造undo數據塊

以此來回滾數據

3.生成redo日志

用於重新操作的日志存放在log buffer cache中。

4.lgwr進程啟動,提交事務並書寫所有日志文件

java事務處理 

TestDemo:結合位於java.sql下面的接口 PreparedStatement和oracle事務實現批量刪除

常用方法:

int[]executeBatch():

將一批命令提交給數據庫來執行,如果全部命令執行成功,則返回更新計數組成的數組。

voidsetString(int parameterIndex,
String x):

將指定參數設置為給定Java String 值。在將此值發送給數據庫時,驅動程序將它轉換成一個 SQL VARCHAR 或 LONGVARCHAR 值。

Demo

/**刪除用戶-2014年8月11日18:19:04
 * @userId 用戶id數組
 */
publicBoolean DeleteUser(String[] userId){
//一個線程安全的可變字符串
StringBuffersb=new StringBuffer();
sb.append("deletefrom t_user where user_id =?");
Connectionconn=null;
PreparedStatementpsmt = null; 
Booleanflag=false;
 
conn=DButil.getConnection();
try {
//關閉自動提交事務
conn.setAutoCommit(false);
//創建一個 PreparedStatement 對象來將參數化的 SQL語句發送到數據庫。
psmt= conn.prepareStatement(sb.toString());
//將一組參數添加到此 PreparedStatement 對象的批處理命令中。
for(inti =0 ;i<userId.length;i++){
psmt.setString(1,userId[i].trim());
psmt.addBatch();                                
}
 
  
   // 執行批量更新
   psmt.executeBatch();
   // 語句執行完畢,提交本事務
   conn.commit();
  
   flag=true;
}catch (SQLException e) {
//TODO Auto-generated catch block
e.printStackTrace();
try{
conn.rollback();
}catch (SQLException e1) {
//TODO Auto-generated catch block
e1.printStackTrace();
}
}
 
returnflag;
}
 

總結

總的來說,感覺還是對oracle很多內部的機制了解的有限。前幾天的設計模式講課,也讓想到這裡的一些東西才有了這篇博客。只能說是非常淺顯的認知,oracle在事務這裡的處理相比在事務的處理上本質還是一致的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved