当前位置: 首页 > news >正文

BLOB 操作

对于数据库是BLOB类型存储数据。

BLOB数据插入:

Oracle提供的标准方式: 先插入一个空BLOB对象,然后Update这个空对象。

首先使用empty_blob()函数插入一个空BLOB对象。

然后重新查询BLOB,使用for update锁字段,注意关闭连接和回滚或提交。

ResultSet 获取 BLOB对象。

BLOB.setByte(byte);  //这个无效,数据存不进去,不能用

或者 OutputStream os = blob.setBinaryStream(0); // 0设置起始位置

blob.getOutputStream();  //已经deprecated

ResultSet 和 Statement  会在连接关闭时自动关闭,因此无需自己关闭。

    /**
     * 保存附件Blob
     * @param attachId
     * @throws SQLException 
     */
    private void setAttachBlob(long attachId, String fileData) throws SQLException {
        logger.debug(">>>setAttachBlob(long attachId)");
        StringBuilder sql = new StringBuilder();
        sql.append(" select file_data fileData from test_attach where attach_id=" + attachId + "  for update");
        Connection connection = null;
        try {
            byte[] byteStream = Base64.decodeBase64(fileData.getBytes("UTF-8"));
            connection = super.getDbHelper().getConnection();
            connection.setAutoCommit(false);

ResultSet rs = connection.prepareStatement(sql.toString())
.executeQuery();
if (rs.next()) {
BLOB blob = (BLOB) rs.getBlob("fileBody");
OutputStream os = blob.setBinaryStream(0);
ByteArrayInputStream is = new ByteArrayInputStream(byteStream);
byte[] byteData = new byte[512];
int len = 0;
try {
while((len = is.read(byteData, 0 , 512)) != -1) {
os.write(byteData, 0, len);
}
os.flush();
} catch (IOException e) {
logger.error("file read write error.", e);
} finally {
if(is != null) {
is.close();
}
if(os != null) {
os.close();
}
}
}


            connection.commit();
        } catch (UnsupportedEncodingException e) {
            logger.error("decode error  file get byte...", e);
            e.printStackTrace();
        } catch (DbException e) {
            connection.rollback();
            logger.error("blob save error...", e);
        }finally {
            // 关闭连接
            if(connection != null && !connection.isClosed()) {
                connection.close();
            }
        }
        logger.debug("<<<setAttachBlob(long attachId)");
    }

获取BLOB比较简单:

ResultSet rs = st.executeQuery( "select file_data from  test_attach  where  attach_id=103 ");

if (rs.next()) {

   java.sql.Blob blob = rs.getBlob("file_data ");

   InputStream ins = blob.getBinaryStream();

 

转载于:https://www.cnblogs.com/DennyZhao/p/8885388.html

相关文章:

  • SVN常见符号解析
  • Bootstrap笔记-----bootstrap分页05
  • 二〇一七互联网八大猜想
  • Linux进程管理命令之调整进程优先级
  • 包装类对象
  • Linux应用server搭建手冊—Weblogic服务域的创建与部署
  • ViewPager的高级使用
  • 17、网络--实验五(docker overlay网络实现)
  • 通过ABAP代码判断当前系统类型,BYD还是S4 OP还是S4 Cloud
  • [Contiki系列论文之2]WSN的自适应通信架构
  • 一些好用的库 paramiko
  • 基础才是重中之重~内存里的堆和栈
  • 【芯片救德国】博世10亿欧元建世界最先进芯片工厂,2021年正式投产
  • spring常用的注解
  • 《人件》阅读笔记三
  • Akka系列(七):Actor持久化之Akka persistence
  • Apache Spark Streaming 使用实例
  • Bytom交易说明(账户管理模式)
  • CEF与代理
  • Centos6.8 使用rpm安装mysql5.7
  • ES学习笔记(12)--Symbol
  • gitlab-ci配置详解(一)
  • jquery ajax学习笔记
  • learning koa2.x
  • node和express搭建代理服务器(源码)
  • Python - 闭包Closure
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 工作中总结前端开发流程--vue项目
  • 嵌入式文件系统
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • const的用法,特别是用在函数前面与后面的区别
  • Spring第一个helloWorld
  • 第二十章:异步和文件I/O.(二十三)
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • (14)Hive调优——合并小文件
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (笔试题)合法字符串
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (九)信息融合方式简介
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)Linux整合apache和tomcat构建Web服务器
  • .Family_物联网
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET Framework 4.6.2改进了WPF和安全性
  • .Net 代码性能 - (1)
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET大文件上传知识整理
  • .Net面试题4
  • @我的前任是个极品 微博分析