当前位置:首页
开发技术指南» 文章正文
    引言:

    摘要: install shield安装时能不能检测mysql的安装路径啊,我要把数据库安装到mysql\data下,我该怎么找到mysql的安装路径,好像通过查找注册表或者查找mysql文件夹可以实现,但是谁做过阿,能给些建议吗 ......
 ·vb高手进    »显示摘要«
    摘要: 我写了一个用来调整文档大小的程序,而且已经定义了:on error goto objerror objerror: if err <> 429 and err <> 4605 then objword.quit set objword = nothing exit sub else resume next end if 为什么,当找不到文件时,扑捉不到他的出......


从ResultSet取字段值的效率问题

private   static   void   initSrcCols(ResultSet   rs)   throws   SQLException  
  {  
                    long   tt;  
                    tt=System.currentTimeMillis();  
  servicekey   =   rs.getInt(1); //servicekey  
   
  callcost   =   rs.getInt(2); //callcost  
  callee   =   rs.getString(3);     //callee  
      caller=rs.getString(4);     //caller  
      t1=t1+System.currentTimeMillis()-tt;  
      tt=System.currentTimeMillis();  
          if(caller.startsWith("010"))  
                caller=caller.substring(3,caller.length());  
  t2=t2+System.currentTimeMillis()-tt;  
  tt=System.currentTimeMillis();  
  chargemode=rs.getInt(5);   //chargemode  
  cardid=rs.getString(6);  
  called=rs.getString(7);  
  t3=t3+System.currentTimeMillis()-tt;  
  tt=System.currentTimeMillis();  
  if(called.startsWith("010"))  
                  called=called.substring(3,called.length());  
  t4=t4+System.currentTimeMillis()-tt;  
  tt=System.currentTimeMillis();  
  startdateandtime=rs.getString(8); //startdateandtime  
  stopdateandtime=rs.getString(9); //stopdateandtime  
  duration=rs.getString(10); //duration  
                    chargeclass=rs.getInt(11); //chargeclass  
  typeOfTraffic=rs.getInt(12);   //typeOfTraffic  
  t5=t5+System.currentTimeMillis()-tt;      
  }  
   
  public   static   void   main(String[]   args)  
  {  
  ......  
  icnt=0;  
  while(rs.next())  
  {  
        icnt=icnt+1;  
  l4=System.currentTimeMillis();  
          initSrcCols(rs);  
          linitSrcCols=linitSrcCols+System.currentTimeMillis()-l4;  
          if(icnt%10000==0)  
  {  
  System.out.println("t1   =   "+t1);  
  System.out.println("t2   =   "+t2);  
  System.out.println("t3   =   "+t3);  
  System.out.println("t4   =   "+t4);  
  System.out.println("t5   =   "+t5);  
  System.out.println("linitSrcCols   =   "+linitSrcCols);  
  t1=0;  
          t2=0;  
          t3=0;  
          t4=0;  
          t5=0;  
          linitSrcCols=0;  
  }  
  }  
  }  
   
  执行结果如下:  
  -------------Time   Used   Summary-------------  
  <<   At   20050908082659   :   t1   =   2213  
  t2   =   32  
  t3   =   800  
  t4   =   10  
  t5   =   3102  
  Processed   10000   records  
  linitSrcCols   =   6230  
  -------------Time   Used   Summary-------------  
  -------------Time   Used   Summary-------------  
  <<   At   20050908082711   :   t1   =   2653  
  t2   =   24  
  t3   =   911  
  t4   =   9  
  t5   =   1922  
  Processed   20000   records  
  linitSrcCols   =   5539  
  -------------Time   Used   Summary-------------  
  -------------Time   Used   Summary-------------  
  <<   At   20050908082724   :   t1   =   2211  
  t2   =   14  
  t3   =   1086  
  t4   =   3  
  t5   =   2809  
  Processed   30000   records  
  linitSrcCols   =   6137  
  -------------Time   Used   Summary-------------  
  -------------Time   Used   Summary-------------  
  <<   At   20050908082803   :   t1   =   6640  
  t2   =   9  
  t3   =   7067  
  t4   =   8  
  t5   =   6902  
  Processed   40000   records  
  linitSrcCols   =   20644  
  -------------Time   Used   Summary-------------  
  -------------Time   Used   Summary-------------  
  <<   At   20050908082850   :   t1   =   10045  
  t2   =   9  
  t3   =   5040  
  t4   =   6  
  t5   =   10039  
  Processed   50000   records  
  linitSrcCols   =   25153  
  -------------Time   Used   Summary-------------  
  -------------Time   Used   Summary-------------  
  <<   At   20050908082942   :   t1   =   7272  
  t2   =   8  
  t3   =   8923  
  t4   =   1  
  t5   =   14992  
  Processed   60000   records  
  linitSrcCols   =   31210  
  -------------Time   Used   Summary-------------  
  -------------Time   Used   Summary-------------  
  <<   At   20050908083035   :   t1   =   9120  
  t2   =   8  
  t3   =   11011  
  t4   =   2  
  t5   =   13179  
  Processed   70000   records  
  linitSrcCols   =   33337  
  -------------Time   Used   Summary-------------  
  -------------Time   Used   Summary-------------  
  <<   At   20050908083129   :   t1   =   10056  
  t2   =   4  
  t3   =   6959  
  t4   =   3  
  t5   =   13177  
  Processed   80000   records  
  linitSrcCols   =   30214  
  -------------Time   Used   Summary-------------  
  越到后面,linitSrcCols的值越来越大,但基本在30-40之间,请问有什么办法可以减小运行时间?

NO.1   作者: flyxxxxx

应该只取你要的数据,一般来说,人只会看前面的部分数据,所以一次只输出用户要的数据,其它的数据通过翻页来查看。

NO.2   作者: mxlmwl

这个东西无所谓了,估计你的程序是一次性导入,又不是定时任务,没关系了,只要做好事务控制,别的都无所谓了。至于rs.getString等,是jdbc的东西,你无法改了,最多改改startsWith,可以用charAt来替换,或者把你做处理的部分进行优化。

NO.3   作者: dlxu

采用翻页,每次只查询不超过固定大小数量的数据

NO.4   作者: Squall1009

我这可不是用来做网页的,而是从一个远程的informix数据库中去把一个大表[1千万]里的数据取下来,  
  做一些处理之后,存到本地Oracle数据库.  
   
  其实,你还是可以每次取几百条记录,然后将这些记录插入Oracle,多做几次就好了.  
  一起取的话,你的程序运行的时候的堆空间不够,这个是java.lang.OutOfMemoryError出现的原因  
   
  最好,插入几百条做一次提交,要不数据库的回滚段也容易出问题

NO.5   作者: mxlmwl

一千万的数据如果你select   *,如果不出OutOfMemoryError才怪。你的jvm内存不够了啊,你可以参考oracle的rownum方式,每次取1000条,下次取1000-2000,2000-3000,依次下去,把每次执行后的数据记录所在位置记录下来,以便操作中突然当机,可以从该处继续运行。  
   
  至于效率,利用jdbc取数据,最多就是select的优化,以及存入数据库时的addBatch,别的就谈不上什么东西了。

NO.6   作者: caimaohua

注意,你可以设置不返回消息  
   
  因为每执行一条SQL语句就会向服务器返回一个消息,你可以去设置的

NO.7   作者: stone_lee

在你的大表那端写Store   Procedure了  
  如果数据太多,考虑在服务器定时执行导入了  
  如果判断太多,SQL查询数据,一次送入HashMap,然后循环判断取数据导入了  
  你说的OutofMemory是ResultSet数据太多缘故,做分页处理

NO.8   作者: humanity

千万条一次放到内存里真是难以想象。  
  还不是建个结构完全相同的临时表,  
  分页处理存入临时表,   所有处理完成再导入到目标表中,  
  这样失败了也不浪费时间,千万条的数据应该用上了分区表这类的功能吧,可以分区检索数据,  
  ROWID   也能用上来。


    摘要: 比如有一个类,用以数据访问: using system; using system.data; using system.data.sqlclient; using system.configuration; namespace dbbase public class base { protected static string strconn = configurationsetting......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE