`
kyonee
  • 浏览: 48599 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

Hibernate读写Blob/Clob类型数据

阅读更多

Oracle10g中的JDBC驱动已经修正了Hibernate读写Blob/Clob类型数据的问题。操作要点如下:
  1、首先数据表中的clob类型对应java持久化类的String类型;而blob类型对应byte[]类型。

        2、定义hibernate标签时,持久化类中对应clob类型的属性的hibernate type应为text;而对应blob类型的属性的hibernate type应为binary。

  3、以后访问这些对应clob和blob类型的属性时,按普通属性处理,不需要特别编码。

分享到:
评论
1 楼 kyonee 2007-04-10  
补充:读写BLOB                                     
写BLOB到oracle数据库中:

package dbapp;

import java.sql.*;
import java.io.*;
import java.util.*;
import oracle.jdbc.OracleResultSet;
import oracle.sql.*;

public class WriteAttachment {
public WriteAttachment() {
}

public static void main(String args[]) {
try {
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
String url = "jdbc:oracle:thin:@ljy_hshz:1521:wwj";
String userName = "ljy";
String password = "zxcvbnm";

Connection cn = DriverManager.getConnection(url, userName, password);
//*
PreparedStatement ps = cn.prepareStatement(
"insert into ATTACHMENT(ID,NAME,ATTACH) values(?,?,EMPTY_BLOB())");
ps.setString(1, "001");
ps.setString(2, "wordtest.doc");
ps.executeUpdate();
ps.close();
//*/
Statement sql = cn.createStatement();
cn.setAutoCommit(false);
ResultSet rs = sql.executeQuery("select attach from attachment where id='001' for update");
if (rs.next()) {
BLOB blob = ( (OracleResultSet) rs).getBLOB(1);
OutputStream outStream =blob.getBinaryOutputStream();
File file = new File("d:\\javatest\\wordtest.doc");
FileInputStream in = new FileInputStream(file);
//ps.setBinaryStream(3,in,(int)file.length());
byte[] buffer = new byte[10000];
int length=-1;
while((length=in.read(buffer))!=-1){
outStream.write(buffer,0,length);
System.out.println(length);
}
in.close();
outStream.close();
cn.commit();
}
rs.close();
cn.close();
System.out.println("写入BLOB成功!");
}
catch (SQLException e) {
System.out.println(e.getStackTrace()+e.toString());
e.printStackTrace();
}
catch (IOException ioe) {
System.out.println(ioe.getStackTrace()+ioe.toString());
}

}
}

从oracle数据库中读取BLOB对象:

package dbapp;

import java.sql.*;
import java.io.*;
import java.util.*;
import oracle.jdbc.OracleResultSet;
import oracle.sql.*;


public class ReadAttachment {
public ReadAttachment() {
}
public static void main(String args[]) {
try {
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
String url = "jdbc:oracle:thin:@ljy_hshz:1521:wwj";
String userName = "ljy";
String password = "zxcvbnm";

Connection cn = DriverManager.getConnection(url, userName, password);
PreparedStatement ps=cn.prepareStatement("select name,attach from attachment where id='001'");
ResultSet rs=ps.executeQuery();
if(rs.next()){
String filename="d:\\"+rs.getString(1);
File file=new File(filename);
FileOutputStream outStream=new FileOutputStream(file);
InputStream inStream=rs.getBinaryStream(2);
byte[] buffer=new byte[10000];
int length=-1;
while((length=inStream.read(buffer))!=-1){
System.out.println(length);
outStream.write(buffer,0,length);
}
inStream.close();
outStream.close();
}
rs.close();
ps.close();
cn.close();
System.out.println("读出BLOB完毕!");
}
catch (SQLException e) {
System.out.println(e.getStackTrace());
e.printStackTrace();
}
catch(IOException ioe){
System.out.println(ioe.getStackTrace());
}

}

}

相关推荐

    Hibernate对BLOB CLOB操作

    为了实际读取和写入BLOB和CLOB,你需要从文件系统读取数据,然后将其转换为InputStream或Reader,再使用Hibernate提供的方法。例如,你可以使用FileInputStream读取文件,然后将它转换为BLOB,类似地,使用...

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

    例如,你可以通过`setBinaryStream`和`getBinaryStream`方法读写Blob数据,通过`setCharacterStream`和`getCharacterStream`方法读写Clob数据。 在保存或更新带有Clob和Blob字段的实体时,Hibernate会自动处理这些...

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

    这篇博客文章“Hibernate操作Oracle中Clob、Blob字段小结”可能会探讨如何在Hibernate中有效地处理这两种类型的数据。 1. **Clob与Blob的理解**: - Clob:Clob是用于存储大量字符数据的类型,例如长篇文章、XML...

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

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

    使用Jdbc4操作Blob,Clob

    当涉及到处理大型对象(LOBs)如Blobs(Binary Large Objects)和Clobs(Character Large Objects)时,JDBC4提供了一种更为便捷的方式来操作这些数据类型。这篇博客“使用Jdbc4操作Blob,Clob”将深入讲解如何利用...

    spring+hibernate操作oracle的clob字段

    在Spring配置文件中,你需要创建一个`SessionFactory` bean,同时指定一个`lobHandler`属性,用于处理CLOB和BLOB类型的数据。这确保了Spring和Hibernate能够正确地与Oracle数据库交互处理大对象。 ```xml ...

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

    这个过程通常涉及到Blob和Clob数据类型,它们是Java中的两种特殊对象,用于存储大对象(LOB)。Blob用于存储二进制数据,如图片、音频或视频文件,而Clob则用于存储字符数据,比如长文本。以下是如何使用Java处理...

    使用hibernate对oracle读取blob

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

    hibernate中处理大字段 网上收集的文档

    在Hibernate中,CLOB对应的数据类型是java.sql.Clob。 2. BLOB:BLOB用于存储二进制数据,如图片、音频或视频文件。在Hibernate中,BLOB对应的数据类型是java.sql.Blob。 二、配置大字段映射 在Hibernate的实体类...

    关于Clob类型在Hibernate中 的应用小结-- 一篇使用心得.zip

    Clob(Character Large Object)是SQL标准定义的一种数据类型,用于存储大量的字符数据,如长篇文章、XML文档等。在Java中,Clob接口代表了这个概念,它提供了读写大量文本数据的方法。与之相对应的是Blob(Binary ...

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

    1. **Blob/Clob类型**:对于大文本或二进制数据,可以使用数据库的Blob(Binary Large Object)和Clob(Character Large Object)类型。Hibernate2支持将Java的`java.sql.Blob`和`java.sql.Clob`对象映射到数据库的...

    java大对象

    Java大对象(Large Object,简称LOB)是Java数据库连接(JDBC)中用来处理大量数据类型的一个概念,尤其适用于存储图像、音频、视频、文本文件等非结构化数据。在Java编程中,大对象主要涉及到Blob(Binary Large ...

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

    在Oracle数据库中,LOB字段主要有BLOB(Binary Large Object)和CLOB(Character Large Object)两种类型,分别用于存储二进制和字符数据。处理这些字段时,我们需要配置Hibernate的实体类和映射文件。 在实体类中...

    Spring JPA学习

    - `@Lob`: 大对象类型,如BLOB/CLOB。 - `@Transient`: 标记不会被持久化的字段。 - `@ManyToOne`, `@OneToOne`, `@OneToMany`, `@ManyToMany`: 关联关系。 **2.3 实体类写法** - 必须有无参的构造函数。 - 不能...

    06_传智播客JPA详解_大数据字段映射与字段延迟加载

    在JPA中,这些大数据字段通常被映射为Blob(二进制大对象)或Clob(字符大对象)。映射过程涉及到定义实体类中的属性,并使用特定的JPA注解(例如`@Lob`)来指示这些属性应如何与数据库中的大数据字段对应。通过这样...

    JAVA程序开发技术

    - `DataInputStream`, `DataOutputStream`:读写基本类型数据。 **2.2.3 标准输入输出** - **标准流**: - `System.in`:标准输入; - `System.out`:标准输出; - `System.err`:错误输出。 **2.3 文件与目录...

Global site tag (gtag.js) - Google Analytics