`

Hibernate读写Oracle BLOB

    博客分类:
  • java
阅读更多

CREATE TABLE TUSER
(
  ID       VARCHAR2(32 BYTE)                    NOT NULL,
  NAME     VARCHAR2(20 BYTE)                    NOT NULL,
  SEX      VARCHAR2(1 BYTE),
  AGE      NUMBER(3),
  ADDRESS  VARCHAR2(100 BYTE),
  PHONE    NUMBER(10),
  EMAIL    VARCHAR2(255 BYTE),
  IMAGE    BLOB,
  RESUME   CLOB
)
public class test2 {
 public static void main(String[] args) {
  // testWriteLob();
  testReadLob();
 }
 public static void testReadLob() {
  Configuration config = new Configuration().configure();
  SessionFactory sessionFactory = config.buildSessionFactory();
  Session session = sessionFactory.openSession();
  String hql = "from ynn.hibernate.model.TUser";
  Query query = session.createQuery(hql);
  List<TUser> list = query.list();
  Iterator<TUser> iter = list.iterator();
  while (iter.hasNext()) {
   TUser user = (TUser) iter.next();
   try {
    InputStream is = user.getImage().getBinaryStream();
    OutputStream os = new FileOutputStream("a.jpg");
//    通过is.availabel()得不到总长度
    byte[] buf = new byte[1024];
    int i = 0;
    while((i=is.read(buf))!=-1){
     os.write(buf,0,i);
    }
    // 以下读Clob
    is = user.getResume().getAsciiStream();
    while((i=is.read(buf))!=-1){
     System.out.println(new String(buf,0,i));
    }
    is.close();
    os.close();
   } catch (SQLException e) {
    e.printStackTrace();
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  session.close();
 }
 // Clob ,Blob在SQLSERVER下的读写操作 P138
 // Oracle的Clob, Blob都有自己的游标
 public static void testWriteLob() {
  Configuration config = new Configuration().configure();
  SessionFactory sessionFactory = config.buildSessionFactory();
  Session session = sessionFactory.openSession();
  TUser user = new TUser();
  user.setAge(new Long(20));
  user.setName("Shark");
  user.setImage(Hibernate.createBlob(new byte[1]));
  user.setResume(Hibernate.createClob(" "));
  Transaction tx = session.beginTransaction();
  session.save(user);
  // flush() 强制Hibernate立即执行insert sql
  session.flush();
  // 通过refresh(), 强制Hibernate执行select for update
  session.refresh(user, LockMode.UPGRADE);
  System.out.println(user.getImage().getClass());
  /* 向Blob写入实际内容 */
  // 返回的是SerializableBlob类型的对象,这是个实现了Blob接口的对象,但
  // 不能直接转型为BLOB
  SerializableBlob sb = (SerializableBlob) user.getImage();
  // 需要调用它的getWrappedBlob来转型
  BLOB blob = (BLOB) sb.getWrappedBlob();
  try {
   // 将某个问件读入后,写到Blob字段的输出流中
   OutputStream out = blob.getBinaryOutputStream();
   FileInputStream imgis = new FileInputStream("C:\\kb3.jpg");
   byte[] buf = new byte[102400]; // 10k缓存
   int len;
   while ((len = imgis.read(buf)) > 0) {
    out.write(buf, 0, len);
   }
   imgis.close();
   out.close();
  } catch (SQLException e) {
   e.printStackTrace();
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  // 向Clob写入实际内容
  SerializableClob sc = (SerializableClob) user.getResume();
  CLOB clob = (CLOB) sc.getWrappedClob();
  java.io.Writer writer;
  try {
   writer = clob.getCharacterOutputStream();
   writer.write("this is my resume");
   writer.close();
  } catch (SQLException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  // save
  session.save(user);
  tx.commit();
  session.close();
 }
转载自:http://huazhouji.iteye.com

分享到:
评论

相关推荐

    使用hibernate对oracle读取blob

    Hibernate作为一款流行的ORM(对象关系映射)框架,提供了与Oracle数据库交互的简便方式,包括处理Blob数据。本文将详细介绍如何使用Hibernate和JDBC读取和存储Oracle数据库中的Blob对象。 ### 1. Hibernate Blob...

    JDBC+Hibernate将Blob数据写入Oracle

    Hibernate提供了`BlobType`等类型映射器来简化BLOB字段的读写操作。开发者可以通过实体类中的字段直接与BLOB类型的数据库字段关联,Hibernate会在后台自动处理BLOB的读取和写入过程。 总之,无论是使用JDBC还是...

    Hibernate对BLOB CLOB操作

    同时,确保数据库支持高效的BLOB和CLOB操作,比如Oracle的BFILE类型或使用流式处理。 总之,Hibernate提供了对BLOB和CLOB的便利支持,允许开发者在Java应用中轻松地处理大数据对象,从而实现与数据库的高效交互。...

    hibernate对Blob类型字段进行数据添加.txt

    - 在处理大体积 Blob 数据时,应注意优化性能,比如采用流式读写的方式减少内存占用。 3. **数据库兼容性**: - 当应用需要支持多种数据库时,需要特别注意处理 Blob 数据时的兼容性问题。 4. **异常处理**: -...

    oracle,weblogic读写blob

    本篇文章将深入探讨如何在 Oracle 数据库与基于 WebLogic 的应用中读写 BLOB 数据。 首先,Oracle 数据库提供了多种操作 BLOB 值的方法。在 SQL 查询中,你可以使用 `SELECT BLOB_COLUMN FROM TABLE` 来读取 BLOB ...

    Hibernate操作Oarcle中Clob、Blob字段小结

    在Java的持久化框架Hibernate中,处理大数据类型如Oracle数据库中的Clob(Character Large Object)和Blob(Binary Large Object)字段是一项重要的任务。Clob通常用于存储大量的文本数据,而Blob则适用于二进制...

    jdbc+hibernate存取blob字段

    本篇将详细介绍如何使用JDBC(Java Database Connectivity)与Hibernate框架来操作Oracle数据库中的BLOB字段。 首先,Oracle数据库的BLOB字段提供了对大对象的高效存储,它的性能优于LONG字段,尤其适合存储大容量...

    spring+hibernate操作oracle的clob字段

    在J2EE开发中,处理大数据对象(如大文本或二进制数据)时,Oracle数据库的CLOB...通过以上配置和操作,你可以在Spring和Hibernate的环境中顺利地对Oracle数据库的CLOB字段进行读写,满足J2EE应用中的大数据存储需求。

    关于在Hibernate中对于Clob,Blob字段的处理方法

    本篇将详细介绍在Hibernate中如何处理Clob和Blob字段,以及使用特定Oracle JDBC驱动程序的优势。 首先,Hibernate通过`org.hibernate.type`包中的`ClobType`和`BlobType`来映射Clob和Blob。在实体类中,你需要定义...

    Spring+Hibernate处理Oracle lob字段(一)

    在本文中,我们将深入探讨如何在Java环境下,利用Spring和Hibernate框架处理Oracle数据库中的LOB(Large Object)字段。LOB字段通常用于存储大体积的数据,如文本、图片或视频。在实际开发中,处理这类数据时可能会...

    hibernate动态映射表处理oracle的clob类型

    - 使用Blob/Clob接口:直接操作Clob接口进行读写,而不是将其转换为字符串或其他数据类型,以减少转换开销。 通过以上内容,你应该对在Hibernate中动态映射Oracle 10g的CLOB类型有了深入理解,这将帮助你在实际...

    SSH示例代码(带事物和Blob操作的)

    在DAO层,可能会有专门的方法来处理Blob对象的读写操作,例如使用Session的saveOrUpdate()方法保存包含Blob的数据,使用Blob的setBinaryStream()和getBinaryStream()方法进行读写操作。 项目中的单元测试是保证代码...

    java将图片写入数据库,并读出来(blob clob)

    Blob imageData = Hibernate.createBlob(fis); // 或者使用数据库驱动提供的Blob实现 Blob imageData = connection.createBlob(); imageData.setBinaryStream(1, fis, (int) imageFile.length()); ``` 4. **...

    springMvc+Oracle的图片转二进制流

    总之,将Spring MVC与Oracle结合,处理图片二进制流,需要理解二进制流的概念,掌握文件读写、数据库操作以及Spring MVC的Controller和Service层处理逻辑。通过以上步骤,可以实现图片的上传、存储和展示,使得图片...

    【IT十八掌徐培成】Java基础第24天-01.Blob字段操作.zip

    Blob blob = Hibernate.getLobCreator(session).createBlob(fis); preparedStatement.setBlob(1, blob); ``` 2. **查询Blob数据**: 查询Blob字段时,可以使用ResultSet的getBlob方法获取Blob对象。然后,我们...

    使用Jdbc4操作Blob,Clob

    在Java的数据库编程中,JDBC(Java Database Connectivity)是一个重要的接口,用于与各种数据库进行交互。当涉及到处理大型对象...无论是直接使用JDBC还是结合ORM框架,都可以灵活地实现对Blob和Clob的读写操作。

    hibernate大学教程

    &lt;property name="hibernate.connection.url"&gt;jdbc:oracle:thin:@127.0.0.1:1521:oracle9 &lt;property name="hibernate.connection.username"&gt;peopres &lt;property name="hibernate.connection.password"&gt;peopres ...

    spring1.2+hibernate2对大字段的处理实例

    3. **流式处理**:当读写大数据字段时,可以利用Hibernate2的流式API,避免一次性加载整个字段到内存,减少内存消耗。 4. **二级缓存**:虽然Spring1.2和Hibernate2的版本较旧,但它们仍然支持二级缓存,可以用来...

Global site tag (gtag.js) - Google Analytics