有一个比较复杂的查询并且查询结果比较多的SQL,程序使用的是S2Dao框架(和ibatis差不多)。
现在的问题是,从java程序运行来查询的话,根本就无法返回数据,
但是如果直接在sqlplus里面执行sql的话,数据30秒左右就能返回,
开始以为是绑定变量的问题,于是在sqlplus里,通过绑定变量,然后再执行SQL,结果发现运行时间并不慢。
于是认为是JDBC的问题,但是当数据量不大的情况下,运行java程序,这个SQL还是很快就能返回数据的。这到底是怎么回事?

解决方案 »

  1.   

    数据量大的时候有没报OUTOFMEMORY错误?
      

  2.   

    没有报任何的错误,后来我又试了一下,让java程序根据设定参数,先抽取数据量小的,然后再抽取数据量大的,那么就能够返回了!
    代码很简单,为了测试,我自己就写了一个查询小程序。
      

  3.   

    尝试一下,为java的DB连接创建指定的临时表空间。另外,楼主说的数据多或者少,是一个什么数量级的?
      

  4.   


    是什么样的语句,返回结果集有多少,是纯的sqlplus的环境吗?
      

  5.   


    java程序返回里面,数据流大的时候,一般都是count(*),然后 select ... from tb where rownum<end and rownum>start类似的来取一个页面的全部数据吧。像楼主说的不知道是什么业务逻辑,一次查询非得查询所有的数据记录吗?如果是这样的话,又2种情况:
    1,你的jdbc驱动太老了,支持的java虚拟机缓存太小,导致无法在内存里面存储这么多重数据库取出来的数据,这个应该会报 out of memory的异常吧!2,你的网络流量太小,一次无法传输select * from tb 这么大的数据量,造成端口堵塞,客户端进程死掉。2,