数据移植时 从一个数据库中读出大字段,然后再插入到另一个数据库中,所用的方法就是
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时 就会内存溢出,跟踪代码显示 文件可以读出来,但是插入的时候报的错。
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时 就会内存溢出,跟踪代码显示 文件可以读出来,但是插入的时候报的错。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货