高分求关于oracle的blob字段操作的长度限制问题??

fangss 2006-10-24 02:17:47
我们要插入/修改一个有blog类型的表,使用了如下的代码:

byte[] value =...
PreparedStatement stmt=...

if (value == null) {
stmt.setNull( parameterIndex, Types.BLOB );
}
else {
stmt.setBinaryStream( parameterIndex, new ByteArrayInputStream(value), value.length );
}
如果value的长度小于4000,工作正常,但是value的长度超过4000的时候,就会报如下的错误:

java.sql.SQLException: ORA-01460: 转换请求无法实现或不合理
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:109
3)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.ja
...全文
2526 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyg719 2006-11-02
  • 打赏
  • 举报
回复
这个应该是回滚段不够长
lydvqq 2006-11-02
  • 打赏
  • 举报
回复
UP,楼主贴出解决过程
fangss 2006-11-02
  • 打赏
  • 举报
回复
不是,blob字段用这种方式最大就可以插入4000。要先插入一个空的,再以流的形式写进去才行。
conn.setAutoCommit(false);
String sqlInsert = "INSERT INTO FISHBONE_DIAGRAM ( FISHBONE_DIAGRAM_ID,TIPS_ID, DIAGRAM_RAWDATA) VALUES (100, 2, empty_blob() )";
stmt.executeUpdate(sqlInsert);

ResultSet rset=stmt.executeQuery("SELECT DIAGRAM_RAWDATA FROM FISHBONE_DIAGRAM where FISHBONE_DIAGRAM_ID=100 for update");
byte[] b = new byte[3];
b[0]='a';
b[1]='b';
b[2]='c';
if (rset.next()) {
oracle.sql.BLOB blob = (oracle.sql.BLOB) rset.getBlob("DIAGRAM_RAWDATA");
OutputStream out = blob.getBinaryOutputStream();
out.write(b);
out.flush();
out.close();

}
conn.commit();
hbwhwang 2006-11-01
  • 打赏
  • 举报
回复
是什么问题?
fangss 2006-11-01
  • 打赏
  • 举报
回复
问题已经解决了。
fangss 2006-10-24
  • 打赏
  • 举报
回复
可是我这个才5k就不行了啊~~是不是跟缓存什莫的有关系啊
周四 2006-10-24
  • 打赏
  • 举报
回复
BLOG最大为4GB的
你检查一下

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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