`

关于使用Hibernate向数据库中存取java对象

阅读更多

1、向数据库中存入java对象
   //建立一个字节数组的输出流
   ByteArrayOutputStream byteOut=new ByteArrayOutputStream();
  //使用对象输出流将字节数组流包装起来
  ObjectOutputStream outObj=new ObjectOutputStream(byteOut);
  //使用对象输出流的writeObject方法将query对象写入到字节数组输出流中,query对象作为tss的一个属性存在
  outObj.writeObject(query) ; 
  //使用toByteArray()方法获得一个字节数组
  final byte[] objbytes=byteOut.toByteArray();

  Session session = this.getSession();

  //写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须使用cursor对blob进行操作,因而你在写入Blob之前,必须获得cursor才能进行写入所以必须先要创建一个空的BLOB对象
  tss.setQuery(Hibernate.createBlob(new byte[1]));//创建空的Blob对象
  Serializable s=session.save(tss);
  session.flush();//通过此方法强制执行插入操作

//通过refresh方法,强制Hibernate执行select for update
  session.refresh(tss, LockMode.UPGRADE);
        //向Blob中写入实际的内容
SerializableBlob sb = (SerializableBlob)tss.getQuery();  
java.sql.Blob wrapBlob = sb.getWrappedBlob();  

oracle.sql.BLOB blob=(oracle.sql.BLOB)wrapBlob;
OutputStream out = blob.getBinaryOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(out);
bos.write(objbytes, 0, objbytes.length);
bos.flush();
bos.close();
out.close();
byteOut.close();
outObj.close();

2、从数据库中取出query对象
SerializableBlob sb = (SerializableBlob)tss.getQuery();  
java.sql.Blob wrapBlob = sb.getWrappedBlob();
BLOB inblob = (BLOB)wrapBlob;
InputStream is = inblob.getBinaryStream();
BufferedInputStream bis = new BufferedInputStream(is);
byte[] byte11 = new byte[inblob.getBufferSize()];
if(-1!=bis.read(byte11, 0, byte11.length));
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(byte11));
Query bq = (BooleanQuery)ois.readObject();
ois.close();
bis.close();
is.close();
分享到:
评论

相关推荐

    Hibernate入门.docx

    Hibernate是一种ORM框架,全称为 Object_Relative DateBase-Mapping ,在Java对象与关系数据库之间 建立某种映射,以实现直接存取Java对象 ! 为什么要使用Hibernate? 既然Hibernate是关于Java对象和关系数据库...

    Hibernate中文API

    如果我们希望使用Hibernate提供的所有特性,那么所有的持久化实体(persistent entity)类(这里也包括一些次要依赖类)都需要一个这样的标识符属性。而事实上,大多数应用程序(特别是web应用程序)都需要通过...

    hibernate api

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端...

    NHibernate 资料集合

    它对Java的JDBC(类似于ADO.Net)进行了非常轻量级的对象封装,使得程序员可以随心所欲的使用对象编程思维来操纵数据库,目前在国内Java开发界已经颇为流行,Hibernate+Spring往往是很多Java公司招聘的要求。...

    (超赞)JAVA精华之--深入JAVA API

    1.4 java中的一些常用词汇 1.5 J2SE学习中的30个基本概念 1.6 Java线程 1.7 Java 5.0多线程编程 1.8 Java Socket编程 1.9 Java的内存泄漏 1.10 抽象类与接口的区别 1.11 Java变量类型间的相互转换 2 JAVA与WEB 2.1 ...

    C#开源持久层框架--NHibernate

    NHibernate为你处理这些,你不用自己写SQL去数据库存取对象。你的代码仅仅和对象关联,NHibernat自动产生SQL语句,并确保对象提交到正确的表和字段中去.大量减少开发时人工使用SQL和ADO.NET处理数据的时间. ...

    java三大框架

    而hibernate可以把我们的关系型数据库转换成我们在JAVA中的面像对像来使用。从而让我们在开发时不需要直接写SQL语句,比如database.getName();就可以直接把数据库中的用户名取出来。 Spring J2EE框架被大规模地...

    JAVA SE学习精华集锦

    1.4 java中的一些常用词汇 56 1.5 J2SE学习中的30个基本概念 58 1.6 Java线程 60 1.7 Java 5.0多线程编程 65 1.8 Java Socket编程 80 1.9 Java的内存泄漏 85 1.10 抽象类与接口的区别 86 1.11 Java变量类型间的相互...

    NHibernate中文文档

    ------------看了绝对不后悔,下载后吱个声---------...NHibernate 为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,NHibernat 自动产生SQL语句,并确保对象提交到正确的表和字段中去。

    java面试题

    答:JDO是java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。 CORBA? 答:CORBA标准是公共对象请求代理结构,用途为:用不同的程序设计语言书写,在不同的...

    jdbc笔记(自写)

    在Java中,数据库存取技术 只能通过JDBC 访问数据库: JDBC访问数据库的形式主要有两种: ​ 1).直接使用JDBC的API去访问数据库服务器(MySQL/Oracle). ​ 2).间接地使用JDBC的API去访问数据库服务器. ​ 第三方O/R...

    myeclipse 7.0 集成框架SSH-Framework-Myeclipse7.0.part1.rar

    在db browser视图中对myeclipse derby单击右键,选择open connection启动系统默认derby数据库(注:为了测试hibernate,所以需要存取myeclipse自带默认数据库) 4.回到myeclipse java enterprise perspective( 企业...

    SSH-Framework-Myeclipse7.0.part2.rar

    在db browser视图中对myeclipse derby单击右键,选择open connection启动系统默认derby数据库(注:为了测试hibernate,所以需要存取myeclipse自带默认数据库) 4.回到myeclipse java enterprise perspective( 企业视图...

    Java面试宝典-经典

    4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量...

    Java面试宝典2010版

    4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量...

    java面试题大全(2012版)

    4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量...

    Eclipse开发入门与项目实践 源代码

    案例3-2 在Oracle数据库中存取图片 81 3.3 基于SQL Server数据库系统的开发 86 3.3.1 SQL Server的安装 86 3.3.2 启动SQL Server服务 88 3.3.3 SQL Server主要集成环境简介 88 案例3-3 连接SQL Server...

    最新Java面试宝典pdf版

    4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量...

    Java面试笔试资料大全

    4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量...

Global site tag (gtag.js) - Google Analytics