有一张表table1(a number, b varchar , c varchar,  d number)  ----a为主键
    现在要对表进行修改和删除操作(针对的是表中的一条数据,而不是全表进行删除)实现并发处理:(提示信息是在jsp页面显示的,用的数据库为oracle 9i)
1)并发删除,后删除的提示:存在已经被删除的信息,请重新选择!
2)先删除后修改,提示:该表记录已经被删除!    由于刚刚工作,对并发处理很陌生,请高手们帮帮忙,是用存储过程还是在java中实现并发,最好有实现的过程(代码),千万不要只回答“利用存储过程实现”等这样的语句。
先感谢回答问题的同志了,更感谢帮助我解决问题的同志,高手了。

解决方案 »

  1.   

    oracle的话一般是read commited隔离级别
    而且oracle的多版本控制能提供很好的并发性以及一致性
    所以不用担心会出错
    而且找你的需求
    你可以先select for update nowait加上悲观锁,这个是行级锁,此时其他事物select for update的时候会抛出
    resouce busy的错误
    没必要是用存储过程
      

  2.   

    你用jdbc还是用hibernate?
    用jdbc的话,执行删除操作用executeUpdate()会返回删除的条数,如果删除0条返回-1吧好像,如果返回-1就说明是后删,如果返回条数则删成功。update也是,修改后返回-1表示没有修改,说明已经被删掉了,提示不存在。。
      

  3.   

    谢谢上面的高手的回答,很感谢!
    一、viszl
    (一生所爱):你好!
    select for update nowait加上悲观锁,我不知道怎么使用,我在网上搜了一下,但是没有什么具体的例子。不知道你有时间帮忙给个例子行吗?谢了!
    bill0605030109
    (超级小黑猪):你好!
    我用的是jdbc,executeUpdate()返回值:
    (1) 对于 SQL 数据操作语言 (DML) 语句,返回行计数 (2) 对于什么都不返回的 SQL 语句,返回 0 
    请问对于(2)中的理解我有:一种是本身删除了0条数据,还有一种就是出现异常也会返回0吗?如果异常会返回0的话,那么这样的饿话,就分不清是删除的行不存在还是出现异常了。