我们公司用的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;
}
/********取处上大远程数据结束*********************/