JSP訪問Oracle中,不能對Oracle的行加鎖.

skyinfo 2006-02-14 03:58:46
String strSql="SELECT * FROM QUOTEHEADER WHERE RKEY=5 FOR UPDATE NOWAIT";

con.setAutoCommit(false);
smt=con.prepareStatement(strSql);
ResultSet rs=smt.executeQuery();

.....


發現不能對表QUOTEHEADER的行進行加鎖
...全文
295 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyinfo 2006-02-20
  • 打赏
  • 举报
回复
up
TinyJimmy 2006-02-15
  • 打赏
  • 举报
回复
加锁就是不让其他连接操作这个数据, 只要Connection不要关闭, 继续使用这个Connection操作你的业务即可.

如果这样不行, 增加一个锁字段吧. locked int , --0=无锁, 1=锁定
QwithoutA 2006-02-15
  • 打赏
  • 举报
回复
试试先做个没做任何事的update?
update QUOTEHEADER set RKEY=RKEY WHERE RKEY=5
selet * from QUOTEHEADER WHERE RKEY=5
homepna 2006-02-15
  • 打赏
  • 举报
回复
我也不知道,要不你自己增加个锁字段,标识当前记录是否被加锁,这就不用依赖connection了
skyinfo 2006-02-15
  • 打赏
  • 举报
回复
To:infowain(infowain)

程序只是打開數據記錄結束,頁面沒有退出,對行加鎖的目的就是為了防止另一用戶打開同一頁面的同一條記錄進行修改並保存.
infowain 2006-02-15
  • 打赏
  • 举报
回复
程序执行都结束了,你还索住数据库,这样是不是不太好。
是不是应该重新考虑一下设计问题
infowain 2006-02-15
  • 打赏
  • 举报
回复
程序执行都结束了,你还索住数据库,这样是不是不太好。
是不是应该重新考虑一下设计问题
skyinfo 2006-02-14
  • 打赏
  • 举报
回复
我找到了問題的原因:是我在執行sql語句後,關閉了連接.所以不能對行加鎖

String strSql="SELECT * FROM QUOTEHEADER WHERE RKEY=5 FOR UPDATE NOWAIT";
con.setAutoCommit(false);
smt=con.prepareStatement(strSql);
ResultSet rs=smt.executeQuery();

.....


if(con !=null){
try{con.close();} catch(SQLException e){;}
con=null;
}//end if


可是我又必須斷開連接,否則會用完Oracle的連接.
各位大俠有什麼好的方案:在jsp中對oracl進行行加鎖?
homepna 2006-02-14
  • 打赏
  • 举报
回复
我用了jdbc直接连接的,我用hibernate也是可以的,hibernate用的就是容器的连接池啊,我看你贴出来的代码是没有问题的,数据锁定是由数据库完成的,跟datasource没啥关系吧
skyinfo 2006-02-14
  • 打赏
  • 举报
回复
我測試過真的不會對oracle行加鎖,我用的是tomcat連接池

to: homepna(microclock)

你是用jdbc直接連接oracle,還是用的連接池?
homepna 2006-02-14
  • 打赏
  • 举报
回复
不会啊,我试了之后是可以加锁的啊
skyinfo 2006-02-14
  • 打赏
  • 举报
回复
我要對行加鎖,所以須用事務.
polarman 2006-02-14
  • 打赏
  • 举报
回复
select语句好像没有必要用事务吧

67,542

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧