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();
}
分享到:
相关推荐
Hibernate作为一款流行的ORM(对象关系映射)框架,提供了与Oracle数据库交互的简便方式,包括处理Blob数据。本文将详细介绍如何使用Hibernate和JDBC读取和存储Oracle数据库中的Blob对象。 ### 1. Hibernate Blob...
Hibernate提供了`BlobType`等类型映射器来简化BLOB字段的读写操作。开发者可以通过实体类中的字段直接与BLOB类型的数据库字段关联,Hibernate会在后台自动处理BLOB的读取和写入过程。 总之,无论是使用JDBC还是...
同时,确保数据库支持高效的BLOB和CLOB操作,比如Oracle的BFILE类型或使用流式处理。 总之,Hibernate提供了对BLOB和CLOB的便利支持,允许开发者在Java应用中轻松地处理大数据对象,从而实现与数据库的高效交互。...
- 在处理大体积 Blob 数据时,应注意优化性能,比如采用流式读写的方式减少内存占用。 3. **数据库兼容性**: - 当应用需要支持多种数据库时,需要特别注意处理 Blob 数据时的兼容性问题。 4. **异常处理**: -...
本篇文章将深入探讨如何在 Oracle 数据库与基于 WebLogic 的应用中读写 BLOB 数据。 首先,Oracle 数据库提供了多种操作 BLOB 值的方法。在 SQL 查询中,你可以使用 `SELECT BLOB_COLUMN FROM TABLE` 来读取 BLOB ...
在Java的持久化框架Hibernate中,处理大数据类型如Oracle数据库中的Clob(Character Large Object)和Blob(Binary Large Object)字段是一项重要的任务。Clob通常用于存储大量的文本数据,而Blob则适用于二进制...
本篇将详细介绍如何使用JDBC(Java Database Connectivity)与Hibernate框架来操作Oracle数据库中的BLOB字段。 首先,Oracle数据库的BLOB字段提供了对大对象的高效存储,它的性能优于LONG字段,尤其适合存储大容量...
在J2EE开发中,处理大数据对象(如大文本或二进制数据)时,Oracle数据库的CLOB...通过以上配置和操作,你可以在Spring和Hibernate的环境中顺利地对Oracle数据库的CLOB字段进行读写,满足J2EE应用中的大数据存储需求。
本篇将详细介绍在Hibernate中如何处理Clob和Blob字段,以及使用特定Oracle JDBC驱动程序的优势。 首先,Hibernate通过`org.hibernate.type`包中的`ClobType`和`BlobType`来映射Clob和Blob。在实体类中,你需要定义...
在本文中,我们将深入探讨如何在Java环境下,利用Spring和Hibernate框架处理Oracle数据库中的LOB(Large Object)字段。LOB字段通常用于存储大体积的数据,如文本、图片或视频。在实际开发中,处理这类数据时可能会...
- 使用Blob/Clob接口:直接操作Clob接口进行读写,而不是将其转换为字符串或其他数据类型,以减少转换开销。 通过以上内容,你应该对在Hibernate中动态映射Oracle 10g的CLOB类型有了深入理解,这将帮助你在实际...
在DAO层,可能会有专门的方法来处理Blob对象的读写操作,例如使用Session的saveOrUpdate()方法保存包含Blob的数据,使用Blob的setBinaryStream()和getBinaryStream()方法进行读写操作。 项目中的单元测试是保证代码...
Blob imageData = Hibernate.createBlob(fis); // 或者使用数据库驱动提供的Blob实现 Blob imageData = connection.createBlob(); imageData.setBinaryStream(1, fis, (int) imageFile.length()); ``` 4. **...
总之,将Spring MVC与Oracle结合,处理图片二进制流,需要理解二进制流的概念,掌握文件读写、数据库操作以及Spring MVC的Controller和Service层处理逻辑。通过以上步骤,可以实现图片的上传、存储和展示,使得图片...
Blob blob = Hibernate.getLobCreator(session).createBlob(fis); preparedStatement.setBlob(1, blob); ``` 2. **查询Blob数据**: 查询Blob字段时,可以使用ResultSet的getBlob方法获取Blob对象。然后,我们...
在Java的数据库编程中,JDBC(Java Database Connectivity)是一个重要的接口,用于与各种数据库进行交互。当涉及到处理大型对象...无论是直接使用JDBC还是结合ORM框架,都可以灵活地实现对Blob和Clob的读写操作。
<property name="hibernate.connection.url">jdbc:oracle:thin:@127.0.0.1:1521:oracle9 <property name="hibernate.connection.username">peopres <property name="hibernate.connection.password">peopres ...
3. **流式处理**:当读写大数据字段时,可以利用Hibernate2的流式API,避免一次性加载整个字段到内存,减少内存消耗。 4. **二级缓存**:虽然Spring1.2和Hibernate2的版本较旧,但它们仍然支持二级缓存,可以用来...