永发信息网

怎么操作Blob类型的字段

答案:2  悬赏:60  手机版
解决时间 2021-01-26 10:37
  • 提问者网友:练爱
  • 2021-01-25 22:01
怎么操作Blob类型的字段
最佳答案
  • 五星知识达人网友:人類模型
  • 2021-01-25 23:35
用loadfromfile()或savetofile()方法实现blob类型数据的处理。
全部回答
  • 1楼网友:零点过十分
  • 2021-01-26 01:05
1.使用jdk中的方法进行传输。在resultset 中有getblob()方法,在preparedstatement中有setblob()方法,所以大多数人都会尝试setblob (),getblob() 进行读写,或者两个数据库之间blob的传输。这种方法实际上是行不通的,据网上的一些资料介绍,说sun官方的文档有些方法 都是错误的。 2.使用resultset.getbinarystream 和preparedstatement.setbinarystream对blob进行读写或两个数据库间的传输。这种方法我自己尝试过, 发现,如果blob中存储的是文本文件的话,就没问题,如果是二进制文件,传输就会有问题。 根据自己的经验,以及查阅了oracle的官方文档,都是使用如下处理方法: 1.新建记录,插入blob数据 1.1首先新建记录的时候,使用oracle的函数插入一个空的blob,假设字段a是blob类型的: insert xxxtable(a,b,c) values(empty_blob(),'xxx','yyyy') 1.2后面再查询刚才插入的记录,然后更新blob,在查询前,注意设置connection的一个属性: conn.setautocommit(false);如果缺少这一步,可能导致fetch out of sequence等异常. 1.3 查询刚才插入的记录,后面要加“ for update ”,如下: select a from xxxtable where xxx=999 for update ,如果缺少for update,可能出现row containing the lob value is not locked 的异常 1.4 从查询到的 blob字段中,获取blob并进行更新,代码如下: blob blob = (blob) rs.getblob("a"); outputstream os = blob.getbinaryoutputstream(); bufferedoutputstream output = new bufferedoutputstream(os); 后面再使用output.write方法将需要写入的内容写到output中就可以了。例如我们将一个文件写入这个字段中: bufferedinputstream input = new bufferedinputstream(new file("c://hpwave.log").tourl().openstream()); byte[] buff = new byte[2048]; //用做文件写入的缓冲 int bytesread; while(-1 != (bytesread = input.read(buff, 0, buff.length))) { output.write(buff, 0, bytesread); system.out.println(bytesread); } 上面的代码就是从input里2k地读取,然后写入到output中。 1.5上面执行完毕后,记得关闭output,input,以及关闭查询到的resultset 1.6最后执行conn.commit();将更新的内容提交,以及执行conn.setautocommit(true); 改回connction的属性
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯