使用java JDBC方式操作oracle blob类型数据

29 篇文章 0 订阅
22 篇文章 0 订阅
/**
     * 
     * @param query    表示sql语句
     * @param idForQuery 标识主键
     * @param value  表示需要写入的字符串数据
     * @throws Exception
     */
public static void writeBlobGBKBinaryStream(String query, int idForQuery,
			String value) throws Exception {
		PreparedStatement p = null;
		ResultSet rs = null;
		OutputStream blobWriter = null;
		try {

			p = JForumExecutionContext.getConnection().prepareStatement(query);
			p.setInt(1, idForQuery);

			rs = p.executeQuery();
			rs.next();
			Blob text = rs.getBlob(1);//在此获取第一个blob类型的字段,如果知道该段名称,也可以使用该名称

			if (text instanceof BLOB) {
				blobWriter = ((BLOB) text).getBinaryOutputStream();//获取字节输出流
			} else {
				blobWriter = text.setBinaryStream(0);
			}

			blobWriter.write(value.getBytes("GBK"));//写出数据blobW

			blobWriter.close();
		} catch (IOException e) {
			throw new DatabaseException(e);
		} finally {
			if (blobWriter != null) {
				blobWriter.close();
			}

			DbUtils.close(rs, p);
		}
	}

注意以下几点:

1,本方法只能插入一条记录,其本质上不是insert,而是update,因为当调用该方法之前,表中已存在一条数据,其blob类型的字段为空值,在此把空值填补上。

2,通过query参数是一个select参数,而不是insert或update,比如SELECT vblob FROM pub_t_bu_image where datakey=? FOR UPDATE 别忘记for update。在执行完查询之后别忘记rs.next(),这样才能定位到该条记录中。

3,一条记录中也可以加入多个blob类型数据。Blob text = rs.getBlob(1);可以理解为在select 语句中,我要获得第一个blob类型字段,如果有多个可以设置编号的不同,如果明确知道字段的名称,也可以直接使用。

4,获得流getBinaryOutputStream(),该方法在oracle.sql包中,与使用必先导入,另外需要验证类型是否为blob。

读的时候与之类似,不再赘述,只是注意编码方式保持一致。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值