SQL如何更新数据库二进制图片?

码农先生 发布于 2013/05/20 09:30
阅读 1K+
收藏 0

使用平台:Java + DB2

1、数据库中的BAK表,字段如:
======================================================
  编号(code)    备份名称(bakName)    数据(bakData)
======================================================
 [字符串类型]      [字符串类型]          [二进制类型]
======================================================

2、执行语句:
update BAK b set b.name = '备份',b.data = 【?】 where b.id = 'E35A67Y';

3、其中【数据(bakData)】是以二进制的形式储存的,现在我需要更新编号为E35A67Y的这条数据,备份名称好更新,就是加问号的二进制数据不知道怎么一起更新了。。。

加载中
0
戴威
戴威
Spring有LobCreator和LobHandler来处理Blob和Clob。
戴威
戴威
回复 @码农先生 : 那就只有自己写hql了。
码农先生
码农先生
回复 @戴威 : 试过这种方式,不过数据太大时效率。。。就没效率了。。。
戴威
戴威
回复 @码农先生 : 你需要先load,然后set,最后update。
码农先生
码农先生
谢谢,现在已经解决了。。。 求证:hibernate不支持部分字段更新?
0
魔力猫
魔力猫
去看数据库的文档,JDBC如何操作BLOB。
码农先生
码农先生
网上查的千篇一律,就是没有修改。。。
0
daxiaoming
daxiaoming

既然是用 Java 的,更新字符串和更新二进制是一样的道理。请看以下程序片段:

//需要先读取图片文件数据
Byte[] imgData = getImageData();
//更新到数据库
PreparedStatement pstmt = con.prepareStatement("update BAK b set
	b.name = '备份',b.data = ?  where b.id = 'E35A67Y'");
//填充数据,关键!!!!!!!!
pstmt.setBytes(1, imgData);
//执行更新
pstmt.executeUpdate()

码农先生
码农先生
我现在的“imgData”是通过 Hibernate.createBlob(new FileInputStream(file)); 创建的,类型为 Java 中的 Blob 类型,如果直接给占位符赋值的话会报错。。。
0
戴威
戴威
pstmt.setBlob(Blob data);
码农先生
码农先生
嗯,对的,现在用的就是这种方式,之前用的 Hibernate 拼字符串。。。
返回顶部
顶部