//测试存储二进制文件
 @Test
 public void test() throws IOException{
  InputStream in=new FileInputStream("E:\\test.txt");
  byte[] tblob=new byte[in.available()];
  in.read(tblob);
  in.close();
  Session ses = HibernateSessionFactory.getSession();
  System.out.println(ses.hashCode());
  ses.beginTransaction();
  Bigobject bb=new Bigobject("测试大文本", tblob);
  ses.save(bb);
  ses.getTransaction().commit();
  ses.close();
 }
 //测试读取二进制文件
 @Test
 public void readTest() throws IOException{
  Session ses = HibernateSessionFactory.getSession();
  Bigobject bigobject = (Bigobject) ses.get(Bigobject.class, 42);
  System.out.println(bigobject.getTclob());
  if(bigobject.getTblob()!=null){
   OutputStream os=new FileOutputStream("E:\\readbat.txt");
   os.write(bigobject.getTblob());
   os.close();
  }
  
 }
 //测试Blob和Clob类型
 @Test
 public void test1() throws Exception{
  Session ses=HibernateSessionFactory.getSession();
  ses.beginTransaction();
  Bigobject bob=new Bigobject();
  bob.setTclob(ses.getLobHelper().createClob(" "));//保存一个空的Clob实例
  bob.setTblob(ses.getLobHelper().createBlob(new byte[1]));//保存一个空的Blob实例
  ses.save(bob);//保存对象
  ses.flush();//刷新缓存
  ses.refresh(bob,LockMode.UPGRADE);//锁定记录
  if(bob.getTclob()!=null){
   Writer writer=bob.getTclob().setCharacterStream(0);
   writer.write("记不住啊");
   writer.close();
  }
  if(bob.getTblob()!=null){
   InputStream in=new FileInputStream("E:\\ceshi.txt");
   byte[] byteArray=new byte[in.available()];
   in.read(byteArray);
   in.close();
   //把文件中的二进制数据写到Blob对象中
   OutputStream os=bob.getTblob().setBinaryStream(1L);
   os.write(byteArray);
   os.close();
  }
  ses.getTransaction().commit();
  ses.close();
  
 }
 //测试Blob和Clob类型  从数据库读到硬盘
 @Test
 public void test2() throws Exception{
  Session ses=HibernateSessionFactory.getSession();
  Bigobject obj = (Bigobject) ses.get(Bigobject.class, 59);
  if(obj.getTclob()!=null){
   Reader reader=obj.getTclob().getCharacterStream();
   char[] cha=new char[1];
   StringBuilder sb=new StringBuilder();
   while(reader.read(cha)!=-1){
    sb.append(new String(cha));
   }
   System.out.println(sb.toString().trim());
   reader.close();
  }
  if(obj.getTblob()!=null){
   InputStream in=obj.getTblob().getBinaryStream();
   OutputStream os=new FileOutputStream("E:\\aaa.txt");
   int len=-1;
   while((len=in.read())!=-1){
    os.write(len);
   }
  }
    ses.close();
  
 }

Hibernate二进制或大文件类型数据和Oracle交互的更多相关文章

  1. 从Excel(CSV)文件导入数据到Oracle

    步骤: 1.准备数据:在excel中构造出需要的数据2.将excel中的数据另存为文本文件(有制表符分隔的)3.将新保存到文本文件中的数据导入到pl*sql中在pl*sql中选择tools--text ...

  2. KingbaseES 时间类型数据和oracle时间类型的区别

    Oracle日期时间类型有两类,一类是日期时间类型,包括Date, Timestamp with time zone, Timestamp with local time zone.另一类是Inter ...

  3. 【原创】用JAVA实现大文件上传及显示进度信息

    用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/grayprince/UploadBigFil ...

  4. PHP读取CSV大文件导入数据库的示例

    对于数百万条数据量的CSV文件,文件大小可能达到数百M,如果简单读取的话很可能出现超时或者卡死的现象. 为了成功将CSV文件里的数据导入数据库,分批处理是非常必要的. 下面这个函数是读取CSV文件中指 ...

  5. PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)

    CSV大文件的读取已经在前面讲述过了(PHP按行读取.处理较大CSV文件的代码实例),但是如何快速完整的操作大文件仍然还存在一些问题. 1.如何快速获取CSV大文件的总行数? 办法一:直接获取文件内容 ...

  6. 用JAVA实现大文件上传及显示进度信息

    一. 大文件上传基础描述: 各种WEB框架中,对于浏览器上传文件的请求,都有自己的处理对象负责对Http MultiPart协议内容进行解析,并供开发人员调用请求的表单内容. 比如: Spring 框 ...

  7. java+大文件断点续传

    用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/1269085759/up6-jsp-mysq ...

  8. Hadoop如何将TB级大文件的上传性能优化上百倍?

    这篇文章,我们来看看,Hadoop的HDFS分布式文件系统的文件上传的性能优化. 首先,我们还是通过一张图来回顾一下文件上传的大概的原理. 由上图所示,文件上传的原理,其实说出来也简单. 比如有个TB ...

  9. 【c++基础】二进制格式输出char类型

    前言 使用CAN通信时将信号转换为char类型进行传输,要查看传输的信息是否正确需要将char类型数据以二进制格式输出: code #include <iostream> int main ...

随机推荐

  1. IE6/7中setAttribute不支持class/for/rowspan/colspan等属性

    如设置class属性 ? 1 el.setAttribute('class', 'abc'); 在IE6/7中样式“abc”将没有起作用,虽然使用el.getAttribute('class')能取到 ...

  2. linux下线程调用sleep,进程挂起

    http://blog.csdn.net/horstlinux/article/details/7911457 http://blog.csdn.net/eroswang/article/detail ...

  3. Nginx 启动脚本/重启脚本

    第一步先运行命令关闭nginx sudo kill `cat /usr/local/nginx/logs/nginx.pid` 第二步 vi /etc/init.d/nginx 输入以下内容 #!/b ...

  4. 回调的代理(delegate)实现

    1.CoreManage.h #import <Foundation/Foundation.h> @protocol SampleProtocol; //声明核心类的属性和方法 @inte ...

  5. 【Java 基础篇】【第四课】初识类

    看看Java中如何定义一个类,然后用来调用的,这个比较简单,直接看代码吧. 我发现的类和C++不一样的地方: 1.Java中类定义大括号后没有分号: 2.好像没有 public.private等关键字 ...

  6. Selenium2学习-019-WebUI自动化实战实例-017-获取浏览器类型

    Web UI 自动化脚本分布执行过程中有时候需要获取浏览器的相关信息,此文给出了一个简略获取浏览器类型的方法,敬请各位小主们参阅.若有不足之处,敬请大神指正,不胜感激! 闲话少述,上码. /** * ...

  7. linux spi 设备节点 读写

    本文记录spi设备节点的操作方法. SPI总线设备文件名通常为/dev/spidevN.P(N=0.1.2--,P=0.1.2--), 其中N表示第几路SPI总线,而P表示在该路SPI总线中使用哪个C ...

  8. .NET Framework 4 和 .NET Framework 4 Client Profile

    提出这个问题的背景:在新项目中封装了一个DAL来通过EF框架对数据库操作,但是在项目引用后,每当编译时就会出错!更加诡异的是在Web项目和WCF项目中对此DAL引用时就不会出现此问题.作为一个初学者, ...

  9. [BS-06] 设置release发布时NSLog不打印设置

    设置release发布时NSLog不打印设置 前提:在XCode做开发调试时往往需要打印一些调试信息做debug用,大家知道当打印信息的地方多了之后在模拟器上跑可能不会有什么问题,因为模拟器用的是电脑 ...

  10. Android适配(屏幕适配、国际化适配)-转

    首先来说一下Android的屏幕适配: 关于Android屏幕的一些基本概念知识,自行充电..在此只介绍实际开发过程中的使用 1.说到Android的屏幕适配,首当其冲的就是图片的适配 图片适配遵循两 ...