首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

数据复制效率有关问题

2011-11-23 
数据复制效率问题我们公司用的sqlservlet2000数据库.需要把远端的一个数据库的一个表里的记录(大约3万条)

数据复制效率问题
我们公司用的sqlservlet2000数据库.需要把远端的一个数据库的一个表里的记录(大约3万条)必须通过java程序复制到我们本地的一个数据库表里.我们做了一个程序.但是整个过程需要30分钟.如果等到这个时间的话,session都无效了.特郁闷!代码如下:
/********取处上大远程数据开始*********************/
public   static   boolean   getSDdata(){
log.info( "get   sddata   begin! ");
      boolean   result=false   ;
      /***上大项目读取数据**/

        try   {
        List   list   =   getStudentBaseInfoService().getStudentBaseInfoList( "select   *   from   StudentBaseInfo   order   by   dept_Id ");
        com.ins.util.StringToDate   getdate=new   com.ins.util.StringToDate();
        //   清空班级人数。
                        String   sql   =   "update   AdminClass   set   rs=0,   fkrs=0 ";
                        getSystemDAO().doUpdate(sql);
                        log.info( "list   size   = "+list.size());
        for(int   i=0;i <list.size();i++)
        {

        log.info( "i= "+i);
        StudentBaseInfo   stt   =   (StudentBaseInfo)list.get(i);
        //String   strinsert   =   "insert   into   temptable   (name)   values( 'ddddd ') ";
        String   xh   =   stt.getPersNo().trim();
        String   xm   =   stt.getPersName().trim();
        Integer   intxb   =   stt.getPersSex().intValue();
        String   kh   =   stt.getIcChipNo().trim();
        String   bjbh   =   stt.getDeptId().trim();
        String   bjmc   =   stt.getDeptName();
        String   csny   =   getdate.getString(getdate.getDate(stt.getBirthd())).trim().substring(0,10);
        Integer   nj   =   stt.getNj().intValue();
        Integer   xz   =   stt.getNz().intValue();        
       
       
        /***以下是向学生表中Insert   into   DATA   BEGIN**/
          //第一步   添加院系.
          //log.info( "第一步   添加院系 ");
                                  College   college   =   null;
                                  List     college1list   =   (List)getCollegeDAO().findByChinese( "FROM   College   c   where   c.yxmc=? ",   "上海大学 ");
          //log.info( "colloege1   =   "+college1list.size());
                                  if(college1list.isEmpty()){        


        college   =   new   College();
        college.setYxbh( "yxbhforsd ");
                                        college.setYxmc( "上海大学 ");
        }else{
        college   =   (College)college1list.get(0);
        }
        getCollegeDAO().save(college);
         
                                        //第二步   添加班级.
        //log.info( "第二步   添加班级 ");
        AdminClass   adminClass   =   null;
        //log.info( "bjbh===开始 "+i+ "次 "+bjbh);        
        AdminClass   adminClassfind   =   getAdminClassDAO().findById(bjbh);
              if(adminClassfind==null){
                        //log.info( "第一次加入该班级 ");
                adminClass   =   new   AdminClass();
                adminClass.setRs(1);//行政班人数加1.
                if(!kh.equals( " ")   ||   kh   !=null){
                adminClass.setFkrs(1);                
                }
              }else{
                    //int   countrs   =0,countfkrs=0;//每一次统计人数用。
                    adminClass   =   adminClassfind;
                    adminClass.setRs(adminClassfind.getRs().intValue()+1);//行政班人数加1.                            
              //log.info( "kh= "+kh);
              if(!kh.equals( " ")   &&   kh   !=null){
              adminClass.setFkrs(adminClassfind.getFkrs().intValue()+1);//发卡人数加1.
                }
              //log.info( "第 "+i+ "次加入该班级 ");
              }
              //log.info( "发卡人数: "+adminClass.getFkrs()+   "人数: "+adminClass.getRs());
              if(adminClass.getFkrs().equals(adminClass.getRs())){
              adminClass.setFkzt( "完成 ");
              }else{
              adminClass.setFkzt( "未完成 ");
              }


        adminClass.setBjbh(bjbh);
        adminClass.setBjmc(bjmc);
        adminClass.setNj(nj);
        adminClass.setXz(xz);
        adminClass.setZt(0);//0在校,1毕业。
        adminClass.setCollege(college);          
        getAdminClassDAO().save(adminClass);    
       
                //第三步   添加学生.
        //log.info( "第三步   添加学生 ");
        Student   student   =   new   Student();        
        student.setXh(xh);
        student.setXm(xm);
        student.setSex(getSex(intxb));
        student.setKh(kh);
        student.setCsny(getdate.getDate(csny));
        student.setAdminClass(adminClass);
        student.setAdr( "无 ");//家庭住址。
        student.setMm(xh);
        student.setZt(1);//1在校。2毕业。3退学。4毕业。
        student.setTnation(getTnation( "01 "));//民族编号
        getStudentDAO().save(student);
        //log.info( "添加学生完成 ");
        /***其它表添加学生相关信息*/
       
        /**体段*/
        Checks       checks   =   new   Checks();
        checks.setStudent(student);
        getChecksDAO().save(checks);
        log.info( "check   save   End! ");
        /**健康测试*/
        TestScore       testScore   =   new   TestScore();
        log.info( "st.getxh(): "+student.getXh());
        testScore.setXh(student.getXh());
        testScore.setZtqq(-100);        
        getTestScoreDAO().save(testScore);
        log.info( "TestScore   save   End! ");
       
        /**体育成绩*/
        PeScore       peScore   =   new   PeScore();
        peScore.setXh(student.getXh());
        getPeScoreDAO().save(peScore);
        log.info( "PeScore   save   End! ");
        /***以下是向学生表中Insert   into   DATA   END**/
       
        }
        //log.info( "添加学生完成 ");
result   =   true;

}   catch   (Exception   e)   {  
//   TODO   Auto-generated   catch   block
e.printStackTrace();
}
log.info( "get   sddata   end! ");
return   result;
}
/********取处上大远程数据结束*********************/


[解决办法]
你不能分多次,批量提交嗎?控制好一次提交多少筆數據啊,讓session不過期就好了

热点排行