jdbc 写入blob字段出错

longyuan2801 2009-11-15 10:28:39
数据移植时 从一个数据库中读出大字段,然后再插入到另一个数据库中,所用的方法就是
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时 就会内存溢出,跟踪代码显示 文件可以读出来,但是插入的时候报的错。
...全文
113 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
呦呦 2009-11-30
  • 打赏
  • 举报
回复
up

17,378

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧