数据移植时 从一个数据库中读出大字段,然后再插入到另一个数据库中,所用的方法就是
InputStream  is = rs.getBinaryStream("FLDDATA");
  byte[] buff = new byte[1024 * 1024 * 2];
                 int bytesRead;
                 ArrayList l=new ArrayList();
                 int tep=0; 
                 while ( -1 != (bytesRead = (is.read(buff)))) {
                    l.add(bytesRead+"");
                    
                    l.add(buff);
                    
                    buff = new byte[1024 * 1024 * 2];
                    tep=bytesRead+tep;
                     System.out.println(".............."+tep);
                  }
                  byte[]uy=new byte[tep];
                  int len=0;
                  for(int j=0;j<l.size();j=j+2)
                  {
                    int ll=Integer.parseInt((String)l.get(j));
                    
                    byte[] aa=(byte[])l.get(j+1);
                    for(int k=0;k<ll;k++){
                    uy[k+len]=aa[k];
                  
                    }
                     len=len+ll;
                     
                  
                  }
                  is.close();
然后插入另一个数据库中
String sql="insert into LAW_T_COMMON_TEMPLATE(ID,TEMP,FILE_NAME,CONTENT,FILE_TYPE) values(?,?,?,EMPTY_BLOB(),?)";
   Connection con=null;
    try{
         con=this.getDbConnetion2();
         PreparedStatement st=con.prepareStatement(sql);
         st.setString(1, id);
         st.setString(2, pid);
         st.setString(3, filename);
         st.setString(4, filetype);
  st.executeUpdate();
 
  sql="update a set content=? where id='"+id+"'";
  PreparedStatement stmt=con.prepareStatement(sql);
  stmt.setBinaryStream(1, (new ByteArrayInputStream(blob)),blob.length);
  stmt.executeUpdate();
  con.close();
          
            System.out.println("记录id--------"+id);
  }catch(Exception e){
  e.printStackTrace();
    
    }
  
当文件大小 小于30M时没有问题,一旦大于30M时 就会内存溢出,跟踪代码显示 文件可以读出来,但是插入的时候报的错。