你這里要考慮並發與業務邏輯的一個平衡。但是事實上只能先保證業務正確,那麼就需要對同一條記錄(即同一個單子)進行線性操作了。
最簡單的,利用oracle存儲過程的事務原子性和行鎖機制就可以解決。
比如:
create or replace procere aaa( ...)
as
v_count number;
begin
....
select count(*) into v_count from tbl where id=123 for update;
-- 利用for update鎖住對應這個單號的這條記錄。這樣,在這個存儲過程沒有commit之前,別的存儲過程對id號(你的單號)為123的記錄的for update查詢只能等待。
..... 處理你的業務邏輯;
update tbl set amout=amout+1 where id=123; 這里把跟單人數加1.
... 其他邏輯
end;
/
2. java操作oracle程序,高手幫看下這程序
1 和你程序代碼無關,錯誤是因為emp 定義了觸發器,需要按照觸發器的規則去更新數據才可以成功執行,否則就報出以上錯誤,具體要看你資料庫里emp表上定義的觸發器到底是怎麼寫的/
2 第1句是判斷當前的conn的自動提交類型是true還是flase,如果true,則執行一句自動commit一次;第2行注釋是強行將conn設置為false,就是手動提交,這樣保證執行的事務性,在方法最後自己寫commit,要麼都成功,要麼都失敗,這也是代碼開發時很好的習慣。
3 需要根據你的觸發器規則去update數據,不是任意的數據都可以更新,有時候還可能要更新別的表數據這個觸發器才能繞過
3. java oracle 批量執行sql語句和存儲過程,並且要在一個事務裡面怎麼寫啊,謝謝
你把批量執行sql語句和存儲過程,否放入一個大的存儲過程里,然後在這個大的存儲過程中提交事務,就所有的都會納入事務管理當中。
4. java操作oracle事務並行問題
不能理解為什麼非要把邏輯搞成這樣
什麼樣的業務有這種需求?
很簡單的邏輯
1.更新數據
2.讀取數據
3.根據讀出的數據更新數據
5. java 在Oracle怎麼一次執行多條sql語句,求大神!
批了執行SQL最好的辦法是採用事務機制。具體網路下Java事務,以下是抄來的簡單例子。
publicintdelete(intsID){
dbc=newDataBaseConnection();
Connectioncon=dbc.getConnection();
try{
con.setAutoCommit(false);//更改JDBC事務的默認提交方式
dbc.executeUpdate("deletefrombylawwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_contentwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_affixwherebylawid="+sID);
con.commit();//提交JDBC事務
con.setAutoCommit(true);//恢復JDBC事務的默認提交方式
dbc.close();
return1;
}
catch(Exceptionexc){
con.rollBack();//回滾JDBC事務
exc.printStackTrace();
dbc.close();
return-1;
}
}
不過仔細看樓主的設計,沒必要採用多條SQL。直接String拼成update XSB set XM='FF', ZF='rj' where XH ='101102'就可以了
6. java程序往oracle的事務性臨時表裡插入數據後,沒提交或回滾事務,卻無法查到數據
你在Dao實現類里的那個1sql 語句執行完後 在this.2sql語句的方法試試
7. 求助,關於java調用oracle存儲過程的事務控制的相關推薦
用java來調用存儲過程,一般我們已經把復雜的業務處理邏輯搬到了資料庫,也就是用存儲過程來實現,可以把事務控制放在存儲過程中來實現,這樣從效率上來說會好一些
如果只是移植了一部分業務的話,可以在java中控制事務(也可以藉助spring的事務管理),如rollback等,還是有效的
這個鏈接中有一部分東西,可以看看
http://bbs.csdn.net/topics/260019701