你这里要考虑并发与业务逻辑的一个平衡。但是事实上只能先保证业务正确,那么就需要对同一条记录(即同一个单子)进行线性操作了。
最简单的,利用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