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

解决方案 »

  1.   

    假如服务器都不可以修改的话,而且SQL怎么改也没有什么效果的话。可以考虑配置数据库。让你的这个程序,和其他的程序不用同一个TNS,用一个新的,不设置服务器类型为共享,设置为独占。
      

  2.   

    具体的说问题是这样的:客户原来的报表系统需要扩容,在原有系统的基础上扩容报表显示结果,因此在原有的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中看出执行查询花费的时间非常少,因为是单表查询,但是遍历的时候就报错超时。
    百思不得其解……
      

  3.   

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