String sql="select * from user where 2011-10";
ResultSet rs = jdbc.executeQuery(sb.toString());
String xml =null;
while(rs.next()){
    xml=rs.getString("xml");
}我从数据库中读取xml文件,然后解析xml文件里边的内容,统计每个xml文件里的ID
但是如果有成千上万条记录的话,这句话(xml=rs.getString("xml");)效率太慢了。如何解决?
高手帮帮忙
PS:先不管解析的效率,就是读出xml文件时效率比较慢

解决方案 »

  1.   

    String sql="select xml from user where 2011-10";
    觉得慢就不要用*号了 直接带出变量
    还有where后面那是个什么?
      

  2.   

    不好意思  这块sql语句没写完
    String sql="select * from user t where t.create_time >to_timestamp('20100627111111','yyyymmddhh24missff3') and t.end_time <to_timestamp('20120630111111','yyyymmddhh24missff3')"
      

  3.   

    (xml=rs.getString("xml");)
    这句效率应该不慢啊我感觉这句是瓶颈jdbc.executeQuery(sb.toString());
    你加个索引吧
      

  4.   

    select * from user t where t.create_time >to_timestamp
    不要 select * 你不就要一个字段么
      

  5.   

    与读取
    xml=rs.getString("xml");
    无关吧,有关的应该是XML文件,
    从表中读取不都用这种方式吗?
    或者
    xml=rs.getString(1);
    这种?
      

  6.   

    xml=rs.getString("xml");
    就这句慢
      

  7.   

    xml 这个字符串设置成静态常量
      

  8.   


    不是web项目  数据库是oracle
      

  9.   

    1、索引有没有
    2、数据量多大呢?
    3、xml=rs.getString("xml");改xml=rs.getString(1);或getString("xml");的xml设置为fina static所知道的就那么多了·呵呵
      

  10.   

    xml=rs.getString("xml");
    耗费多长时间计算过吗?
    "xml"字段的数据量有多大?
      

  11.   

    1000条有数据吗? MySQL1000条select出来顶多1秒。
      

  12.   

    大概得4秒吧
    xml数据量也不大  可能就是因为读取的xml文件 所以时间比较慢吧
      

  13.   

    LZ貌似没说xml这个数据是否很大????
      

  14.   


    <?xml version="1.0" encoding="UTF-8"?>
    <ResponseData>
    <ODRMSessionHistory id="1">
    <ODRMSession componentName="physerver-vss01" ODSessionID="3c539b53-10e7-481e-809f-5aeaee9b3c7e" setupDate="20110525T015118.912" teardownDate="20110525T015253.252" ODRMIpAddr="80.3.210.110" SMIpAddr="80.3.230.2" sessionGroup="NGOD-TEST0" resultcode="200">
    <PlayoutHistory time="20110525T015253.252">
    <StreamResources ID="0" SOP="Boston.Pump1.1" filename="Boston.Pump.volume1A" providerID="provider1.com" assetID="STMV201105191851111" segmentNumber="1"/>
    <EventHistory>
    <StartStreamEvent time="20110525T015119.305" streamResourcesID="0" NPT="0.000" newState="PLAY" scale="1.000000"/>
    <EndEvent time="20110525T015253.252" streamResourcesID="0" reason="USER" NPT="0.840" description="User stop" code="200"/>
    </EventHistory>
    </PlayoutHistory>
    </ODRMSession>
    </ODRMSessionHistory>
    </ResponseData>
      

  15.   

    这个东东是从库中取数据,要想提高效率基本上没有什么办法。
    应该是你xml字段中的文本太大了。不过你还可以试试下面几种方案:
    1、使用最新版本的JDBC驱动包;一般新版的驱动包都会对上一版本进行优化或Bug修改。
    2、使用更高版本的JDK;理由同上。
    3、加入缓存机制。如hibernate中的缓存。有第三方jar包,可以看看。当然这些都是治标不治本的。综合你上次的发贴,主要是数据库这块设计的不是很合理。
      

  16.   

    谢谢先
    1,我觉得最根本的问题是 可能是因为读取xml文件造成的
    2,不是web项目 所以没有用到SSH
      

  17.   

    可否这样
    用线程?
    用线程将ResultSet 数据集分开查询 如1000条数据 分成四段 每段查询250条
    最后将四段线程用join方法合并在一起?
    只是有这个想法   不知是否可行   ! 如果可行  不知怎样实现?
      

  18.   

    select xml from ...xml=rs.getString(1);这个地方用索引呢?
      

  19.   

    xml=rs.getString("xml");
    是内存操作,应该不会很慢
    1000多条,String类型,算一下xml字段的大约占多少字节,算一下可能消耗多少内存
      

  20.   

    1000条应该用数据库的话应该很快的为什么要用XML存数据呢?  如果只是测试,以后还在移到数据库的话,就可以不用管这件事读XML,还要解析,一定会慢的
      

  21.   

    如果嫌读取xml慢可以考虑下注解方式。
      

  22.   

    先从源头问一下吧,你的xml字段是怎么保存的?xml字段是什么类型?
      

  23.   

    我不太清楚这个xml文件是怎么插入进去的  字段类型是CLOB
      

  24.   

    那你采用CLOB方式读取试试看
    Clob clob = rs.getClob("xml"); //这样会不会好一点,因为没有发生转换为String
    BufferedReader br = new BufferedReader(clob.getCharacterStream());
    String buf;
    while ((buf=br.readLine()) != null) { //然后自己解析clob,读取xml每一行
        //这里用正则提起你需要的信息
    }
      

  25.   

    用Clob接受 能快上一个不到一秒,可是还得3秒多 还是有点慢 我觉得根本原因可能还是读取xml文件的问题,能不能用我说的(28楼)  这样的方法?
      

  26.   

    多线程未必能提高速度,除非你是多CPU,对于单CPU实际上线程是轮流使用CPU,所以未必比单线程快,多线程的本意不是为了提高速度的,而是为了并发
      

  27.   


    我的确实是多cpu   请问线程池可以实现这样的功能吗!
      

  28.   

    用CacheResultSet,先把所有的记录缓存到服务器内存,然后再搞,这样可以减少取每条记录的开销
      

  29.   

    先打印下执行sql的时间,然后再打印出来解析的时间,如果是sql慢的话,先看db有没有索引等从sql方面优化,如果是解析慢再考虑分批读取或者用其他的解析xml库的代码