有一个比较复杂的查询并且查询结果比较多的SQL,程序使用的是S2Dao框架(和ibatis差不多)。
现在的问题是,从java程序运行来查询的话,根本就无法返回数据,
但是如果直接在sqlplus里面执行sql的话,数据30秒左右就能返回,
开始以为是绑定变量的问题,于是在sqlplus里,通过绑定变量,然后再执行SQL,结果发现运行时间并不慢。
于是认为是JDBC的问题,但是当数据量不大的情况下,运行java程序,这个SQL还是很快就能返回数据的。这到底是怎么回事?
现在的问题是,从java程序运行来查询的话,根本就无法返回数据,
但是如果直接在sqlplus里面执行sql的话,数据30秒左右就能返回,
开始以为是绑定变量的问题,于是在sqlplus里,通过绑定变量,然后再执行SQL,结果发现运行时间并不慢。
于是认为是JDBC的问题,但是当数据量不大的情况下,运行java程序,这个SQL还是很快就能返回数据的。这到底是怎么回事?
代码很简单,为了测试,我自己就写了一个查询小程序。
是什么样的语句,返回结果集有多少,是纯的sqlplus的环境吗?
java程序返回里面,数据流大的时候,一般都是count(*),然后 select ... from tb where rownum<end and rownum>start类似的来取一个页面的全部数据吧。像楼主说的不知道是什么业务逻辑,一次查询非得查询所有的数据记录吗?如果是这样的话,又2种情况:
1,你的jdbc驱动太老了,支持的java虚拟机缓存太小,导致无法在内存里面存储这么多重数据库取出来的数据,这个应该会报 out of memory的异常吧!2,你的网络流量太小,一次无法传输select * from tb 这么大的数据量,造成端口堵塞,客户端进程死掉。2,