起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 184|回复: 9

TQuery中事务控制[问题]

[复制链接]
发表于 2008-7-2 15:17:18 | 显示全部楼层 |阅读模式
lTransactionHandle := lQuery.Connection.Transaction.Start(True);
  lnf:=SysUtils.FormatDateTime('yyyy', Business.Data.SysSrv.SysService.Time);
        lQuery.Close;
        //查询文号明细中的MAX
        lQuery.CommandText := 'select * from YLJ_WHMXB where YYWHLX = '''+whlx+''' and NF='+lnf+' for update';
        lQuery.Open;
        max:=lQuery.FieldByName('Max').AsString;
        //存在MAX则加1
   if  max<>'' then
        begin
        max:=inttostr(strtoint(max)+1);
        wsh:=lnf+TCommonUtils.StrToRightLenStr(max, '0', 6);
        lQuery.Close;
        lQuery.CommandText := 'update YLJ_WHMXB set Max='+max+' where YYWHLX = '''+whlx+''' and NF='+lnf ;
        lQuery.Execute;
        end
lQuery.Connection.Transaction.Commit(lTransactionHandle);
我想对表YLJ_WHMXB 行锁来控制并发,但在执行到lQuery.Open时出现类未注册的错误,java.lang.classCastException 类型:EPojo.请问这是什么问题,还是我的写法有问题?
回复

使用道具 举报

发表于 2008-7-2 15:28:33 | 显示全部楼层
不用事务是否报错?
回复 支持 反对

使用道具 举报

发表于 2008-7-2 15:34:37 | 显示全部楼层
应该是服务端出错了,楼主提供一下服务端日志。
另外,在事务中尽量少些操作,防止死锁。
只要在事务中执行一下update语句就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-2 16:53:22 | 显示全部楼层
2008-7-2 16:49:39 com.caucho.hessian.server.HessianSkeleton invoke
警告: java.lang.Exception: java.sql.SQLException
java.lang.Exception: java.sql.SQLException
        at com.justep.service.BizServiceImp.execute(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor70.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:157)
        at com.justep.hessian.HessianServlet.service(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:831)
        at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:652)
        at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1203)
        at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.ClassCastException: java.sql.SQLException
        at com.justep.service.action.base.SupportAction.execute(Unknown Source)
        ... 19 more
回复 支持 反对

使用道具 举报

发表于 2008-7-2 17:24:19 | 显示全部楼层
楼上日志只能看出是jdbc报的错,但是不知道具体原因。
楼主只在事务里执行Update语句可以吗?

另外,设置断点看看执行的sql语句是否有语法问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-2 17:46:54 | 显示全部楼层
不用事务的话提示error occur during invoke getRecords method,ORA-01002:读取违反顺序的错误
平台是不是不支持for update?
回复 支持 反对

使用道具 举报

发表于 2008-7-2 18:00:03 | 显示全部楼层
这和平台无关,6楼错误是Oracle报的。
楼主可以查看一下Oracle的帮助
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-2 18:14:57 | 显示全部楼层
就是我在数据集上测试SQL语句select * from  YLJ_WHMXB  for update 的话会报
error occur during invoke getRecords method,ORA-01002:读取违反顺序的错误
回复 支持 反对

使用道具 举报

发表于 2008-7-2 18:25:42 | 显示全部楼层
你把语句拿放数据库去执行不报错?
回复 支持 反对

使用道具 举报

发表于 2008-7-2 18:27:05 | 显示全部楼层
在数据库中测试过吗?会报这样的错?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-18 16:03 , Processed in 0.041470 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表