`
Dead_knight
  • 浏览: 1194657 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
752c8642-b795-3fe6-946e-a4e845bffdec
Spring Securi...
浏览量:238432
33caa84e-18a6-3036-a82b-6e2106a4de63
clojure专题
浏览量:48163
E17ca077-44df-3816-a3fe-471c43f6e1e5
WebLogic11g
浏览量:236010
社区版块
存档分类
最新评论

Java实现大对象存储的问题

阅读更多
一、问题描述:
把一个大对象(文件或者超大字符串)存储到数据库中(数据库表中文件字段类型为BLOB),出现IO异常

二、问题分析:
二进制文件应该存为BLOB类型,但JDBC并不支持直接将二进制文件存入数据库中BLOG类型的字段中,如果这样做,将会得到IO异常而不是SQL异常。

三、解决方案:
1.要把一个二进制文件存入oracle,如果用标准的JDBC,数据库表相应的字段类型是LONG ROW类型,示例代码如下:
   创建表,其中detail字段保存文件内容
   Create table tbl_file(name varchar(20),detail long row);
   将文件保存至数据库
   File file = new File("temp.gif");
   int fileLength = (int)file.length();
   InputStream fin = new FileInputStream(file);
   PreparedStatement pstmt = conn.prepareStatement("insert into tbl_file values('temp.gif',?)");
   pstmt.setBinaryStream(1,fin,fileLength);
   pstmt.executeUpdate();

2.如果存储文件对象的数据库字段一定要用BLOB类型存储,就必须使用Oracle自己的方法
   创建表,其中detail字段保存文件内容
   create table tbl_file(name varchar(20),detail BLOB);
   保存文件至数据库主要实现代码:
   con.setAutoCommit(false);
   stmt.executeUpdate("insert into tbl_file values('temp.gif',null)");
   rs = stmt.executeQuery("select detail from tbl_file where name='aaa.gif' for update");
   if(rs.next())
   {
      Blog blob = rs.getBlob("detail");
      BinaryOutputStream out = ((oracle.sql.BLOB)blob).getBinaryOutputStream();
      byte[] b = new byte[((oracle.sql.BLOB)blob).getBufferSize()];
      File file = new File("temp.gif");
      InputStream fin = new FileInputStream(file);
      int len = 0;
      while((len = fin.read(b)) != -1)
      {
         out.write(b,0,len);
      }
      fin.close();
      out.close();
      conn.commit();
   }

四、经验总结:
对于不同类型的数据库字段,JDBC处理的方法不一样,需要了解其原理后针对性使用。
分享到:
评论

相关推荐

    Java 实现Redis存储复杂json格式数据并返回给前端

    主要介绍了Java 实现Redis存储复杂json格式数据并返回给前端操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Java实现调用MySQL存储过程详解

    相信大家都知道存储过程是在大型数据库系统中,一组为了完成特定功能的SQL语句集。存储过程是数据库中的一个重要对象,任何一个...Java调用mysql存储过程,实现如下,有需要的朋友们可以参考借鉴,下面来一起看看吧。

    阿里云对象存储静态工具类(AliOSSUtils.java)快速上手!!!

    根据官网和网上分享的代码自己整理了一个阿里云OSS工具类,自动创建标准公开权限的存储空间,支持上传图片,音频,视频,PDF各种文件,批量上传,上传后支持在线预览,文件路径处理,浏览器文件下载(支持源文件中文...

    springboot集成amazon aws s3对象存储sdk(javav2)

    已实现对象分页列表、对象上传(包含文件完整上传和分片)、对象下载、批量删除对象。其中分片支持断点续传,并实现异步线程池的多线程上传,加快了响应速度。

    java实现内存动态分配

    每运行一个java程序会产生一个java进程,每个java进程可能包含一个或者多个线程,每一个Java进程对应唯一一个JVM实例,每一个JVM...java实现内存动态分配目录 一.实验原理 二.实验流程图 三.实验代码 四.实验结果

    java对象缓冲实现中间件

    用java语言建立一种动态内存缓中间接,附带了源代码和Jar打包文件,在开发具有缓冲的产品中可以使用

    minio对象存储服务

    minio 兼容Amason的S3分布式对象存储项目,采用Golang实现,客户端支持Java,Python,Javacript, Golang语言。 Minio可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作 ...

    腾讯云--对象存储开发文档

    腾讯云--对象存储开发文档

    Java面向对象吃货联盟项目 (HashMap)

    根据Java面向对象吃货联盟项目修改为通过HashMap存储菜品和订单(其实ArrayList更简单) 实现的功能:订餐,查看餐袋,签收订单,删除订单,我要点赞,退出系统 定义的类:菜品类、订单类、测试类(可以把里面实现的...

    java源码包---java 源码 大量 实例

     Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。  部分源代码摘录:  ftpClient = new FtpClient(); //实例化FtpClient对象  String serverAddr=jtfServer.getText(); //得到服务器地址  ...

    Minio对象存储及Springboot整合Minio分片上传文章-代码

    Minio对象存储及Springboot整合Minio分片上传文章----代码

    java实现ArrayList根据存储对象排序功能示例

    主要介绍了java实现ArrayList根据存储对象排序功能,结合实例形式分析了java针对ArrayList的相关运算、排序操作技巧,需要的朋友可以参考下

    基于Java的对象存储管理系统的设计与实现.pdf

    基于Java的对象存储管理系统的设计与实现.pdf Java 程序开发 软件开发 参考文献 专业指导 计算机 课程资料 学习资料

    实现阿里OSS对象存储

    实现阿里云OSS对象存储完整代码全网唯一;具体里面有说明文件,说明文件中还说明了其它技术;

    Java调用Oracle存储过程

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、...Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

    Java 对象序列化详解以及实例实现和源码下载

    Java中的序列化机制有两种实现方式: 一种是实现Serializable接口 另一种是实现Externalizable接口 区别: 实现Serializable接口 1 系统自动储存必要的信息 2 Java内建支持,易于实现,只需实现该接口即可,无须任何...

    springboot整合京东云OSS对象储存

    springboot整合京东云OSS对象储存.实现文件/图片存储,下载,删除操作.有完整的demo.

    java语言实现的电话本

    本程序是用java语言编写的控制台程序。能实现如下功能:增加人名,电话号码,以及备注信息。查找。排序。列出所有人信息。把信息存入txt文档中。从记事本中读取所有人信息。详细说明请见包中.doc文档。

    [java]读书笔记整理:一切都是对象

    这一约束限制了程序的灵活性,所以虽然某些java数据存储于堆栈中——特别是对象引用,但是java对象并不存储其中。 3) 堆 一种通用的内存池(也位于RAM区),用于存放所有的java对象。堆不同于堆栈的好处是:编译器...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     11.1.3 Java大对象类型的Hibernate映射类型  11.1.4 JDK自带的个别Java类的Hibernate映射类型  11.1.5 使用Hibernate内置映射类型  11.2 客户化映射类型  11.2.1 用客户化映射类型取代Hibernate组件  11.2.2 ...

Global site tag (gtag.js) - Google Analytics