blob字段的长度大于4K就报错,请问怎么样设置blob字段的最大长度!

mwg1234567 2008-10-12 04:53:34
因为后台的数据库可以是oracle,也可以是sybase,怎么样在插入blob字段时允许插入4K以上的文件,目前程序报java.sql.SQLException: 数据大小超出此类型的最大值: 5884
...全文
702 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mwg1234567 2008-10-13
  • 打赏
  • 举报
回复
是不是数据有什么可以设置的地方?
mwg1234567 2008-10-13
  • 打赏
  • 举报
回复
改成clob是一样的问题
多壮志 2008-10-13
  • 打赏
  • 举报
回复
另外,只要你的oracle只9i以上,就可以直接在insert 语句中使用empty_blob(),或者empty_clob()函数. 不需要那么麻烦.
多壮志 2008-10-13
  • 打赏
  • 举报
回复
关于这个有一堆的内容可以参考,blob用setBlob,clob用setClob,
问题的关键在于,如果内容很大,那么需要使用指定的流操作对象把需要写的内容分多次写到Clob,或者Blob内容中.
贴一段相对比较完整的给你,这是从本地读取文件,把文件存入到blob的例子.
pst=(OraclePreparedStatement)conn.prepareStatement("select contents from test where .... for update");
java.sql.ResultSet rs=pst.executeQuery();
oracle.sql.BLOB c=null;
if (rs.next()){
c=(oracle.sql.BLOB)rs.getBlob(1);
}
pst.close();
rs.close(); //是否可以关闭呢?
//3)更新内容
java.io.OutputStream writer;
byte[] cbuf=new byte[BufLen];
writer=c.setBinaryStream(1L);

Integer offset=Integer.valueOf(0);
Integer iRead;
iRead=fr.read(cbuf,offset,BufLen);
while (iRead.compareTo(-1)!=0){
//writer.write(cbuf);
writer.write(cbuf,0, iRead);
iRead=fr.read(cbuf,offset,BufLen);
}
writer.flush();
writer.close();
pst=(OraclePreparedStatement)conn.prepareStatement("update test set contents=? where ....");
pst.setBLOB(1, c);
pst.executeUpdate();

对于Oracle的操作,标准的是先select .. for update, 然后设置blob内容,然后才是update ....
simonezhlx 2008-10-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 mwg1234567 的帖子:]
因为后台的数据库可以是oracle,也可以是sybase,怎么样在插入blob字段时允许插入4K以上的文件,目前程序报java.sql.SQLException: 数据大小超出此类型的最大值: 5884
[/Quote]
此处所说并不是要考虑sybase的情况?
vc555 2008-10-12
  • 打赏
  • 举报
回复
你这个BLOB里存的什么?是字符吗?字符改用clob
mwg1234567 2008-10-12
  • 打赏
  • 举报
回复
创建了blob字段后,插入数据如果大于4k,会报这个错,在网上看到需要先使用empty_blob()更新该字段,,但是在调用empty_blob()后仍然会提示这个错,代码如下:

String updateSql = "update iptad_log_filter_rule set script_content=empty_blob() where rule_id="+ruleId;
执行更新

然后调用:
String sql = "update iptad_log_filter_rule set script_content=? where rule_id=?";
ps=conn.prepareStatement(sql);
ps.setObject(1,data);
ps.setLong(2, Long.valueOf(ruleId));
ps.executeUpdate();
ps.close();
conn.close();
就报java.sql.SQLException: 数据大小超出此类型的最大值: 5884
hebo2005 2008-10-12
  • 打赏
  • 举报
回复
bolb最大可以4G啊

17,377

社区成员

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

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