我用的是oracle 9.02版本,使用weblogic7作为发布server,我在java中调用了对数据库的查询,查询的是单表,表中有55个字段,记录一共是3万条,现在我执行了查询之后在遍历结果集的时候发生timeout的问题。怎样努力都无法缩短时间,而客户服务器上的timeout是不能改动到的。所以请求各位朋友,有什么良好的解决方法?

解决方案 »

  1.   

    看看是weblogic报超时,还是数据库报的,然后到相应的地方改。
      

  2.   

    weblogic报错就是说transaction timeout 240s, 我尝试过修改weblogic中JTA的配置,改长timeout的时间值结果就OK,但是,客户production server不允许我去修改timeout的值。所以我只能调整sql的效果
      

  3.   

    回答楼上的。遍历的时候,同样处于连接状态。你要是close掉connection,就读取不到了。会提示connection is closed的错误。
    所以,不仅仅是查询的时候。
      

  4.   

    必须改客户server上的超时设置,33万条记录查询传输的速度主要是网络,看看网络能否扩
      

  5.   

    我也遇到过楼主的问题,不过最后还是修改transaction timeout改的。
    怎么做到分批取,查找的参数是动态传递的,可能大也可能小。而且表中的记录条数也是动态改变的。
    关注更好的解决方式
      

  6.   

    具体的说问题是这样的:客户原来的报表系统需要扩容,在原有系统的基础上扩容报表显示结果,因此在原有的sql逻辑中再增加逻辑,因此造成了整个sql的运行时间增加,超出了客户原来设置的transaction time,而且客户强烈反对更改weblogic server中timeout的时间值,因此鉴于这样的情况, 我采用的batchjob的方式去调用Procedure,然后把结果inset到一个放在一个新建的表中,这个表中的列就对应报表中需要显示的信息,所有业务逻辑计算和查询以及插入新表的操作都在Procedure中完成,而我这个调用Procedure是在一个单独的
    transaction中的,不存在timeout的情况。
    也就是说我的这个表其实就是整个sql业务逻辑跑完之后存放所需报表数据的表。因此我在DAO中做的就是单表的简单查询,字段是55个,记录3万多条。
    由于这套系统采用的是DAO中用jdbc直接链接,因此在java中执行查询后返回结果集,并遍历结果集取值,通过java文件操作生成需要merge到模板中的数据文件。现在的问题就是在执行了查询并且使用了索引之后,返回了结果集,但是在遍历的时候出现了timeout的问题。按照我的理解,遍历结果集就是指针的移动,应该是对于java的开销来说是很小的。但是现在在log中看出执行查询花费的时间非常少,因为是单表查询,但是遍历的时候就报错超时。百思不得其解……
      

  7.   

    不知道说如果使用RowSet的话会不会有好的效果?因为该系统使用的是jdk1.4,因此RowSet的接口需要重写,如果改来使用RowSet的话,是否可以避免timeout的情况出现呢?