blob字段的长度大于4K就报错,请问怎么样设置blob字段的最大长度! 因为后台的数据库可以是oracle,也可以是sybase,怎么样在插入blob字段时允许插入4K以上的文件,目前程序报java.sql.SQLException: 数据大小超出此类型的最大值: 5884 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 创建了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 你这个BLOB里存的什么?是字符吗?字符改用clob 此处所说并不是要考虑sybase的情况? 关于这个有一堆的内容可以参考,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 .... 另外,只要你的oracle只9i以上,就可以直接在insert 语句中使用empty_blob(),或者empty_clob()函数. 不需要那么麻烦. oracle远程建库问题 请教高人:一个奇怪的sql问题! [求助]关于开发中oracle时间方面的处理,谢谢 如何从oracle9i中导出数据库脚本 客户端用PL SQL Developer建表 很急的问题 按周统计和按月统计的问题 请指点。。。谢谢!!!!!!! 用sql loader导数 写ctl文件能否同时对两个表导数? 关于oracele的安装问题 oracle支持事务的嵌套吗,就是多层事务嵌套。如果内层事务提交,外层事务还可以滚回 将表纵向编程横向展示的问题 oracle中怎么进入管理员用户模式?
执行更新 然后调用:
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
问题的关键在于,如果内容很大,那么需要使用指定的流操作对象把需要写的内容分多次写到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 ....