`
tanlan
  • 浏览: 203422 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Hibernate实现Oracle BLOB的数据读写(1)

阅读更多

开发中文件上传到服务器,一般将文件保存在Web服务器的某个目录下,除非有特殊要求将文件存到数据库中保存。

本文主要基于学习的目的而作。

测试环境:Hibernate3.6.7,Oracle 10g Express,JDK7,Win7

1,数据库脚本

create table TUser  (
   ID                   char(32)                        not null,
   name               varchar(10char)                 not null,
   photo               blob,                              --头像
   constraint PK_TUser primary key (ID)
);
 

2,Hibernate配置文件,本文基于传统的hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<property name="connection.driver_class">
			oracle.jdbc.driver.OracleDriver
	</property>
		<property name="connection.url">
			jdbc:oracle:thin:@localhost:1521:XE
	</property>
		<property name="connection.username">tanlan</property>
		<property name="connection.password">tanlan</property>
		<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
		<property name="show_sql">true</property>
		<mapping resource="com/tanlan/hibernate/entity/User.hbm.xml" />
	</session-factory>
</hibernate-configuration>
 
3,编写实体类User.java
package com.tanlan.hibernate.entity;

public class User {
	private String id;
	private String name;
	private byte[] photo;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public byte[] getPhoto() {
		return photo;
	}
	public void setPhoto(byte[] photo) {
		this.photo = photo;
	}
}
 4,编写对应的映射文件,User.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.tanlan.hibernate.entity">
	<class name="User" table="TUser">
		<id name="id">
			<generator class="uuid" />
		</id>
		<property name="name" />
		<property name="photo" type="binary" />
	</class>
</hibernate-mapping>
 5,测试代码
package com.tanlan.hibernate.test;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.tanlan.hibernate.entity.User;

public class TestUser {

	public static void main(String[] args) {
		addUser();
		//getUserById();
		//update();
	}

	private static void addUser() {
		User user = new User();
		user.setName("谭岚");
		File photo = new File("I:\\1.jpg");
		try {
			FileInputStream is = new FileInputStream(photo);
			ByteArrayOutputStream os = new ByteArrayOutputStream();
			byte[] temp = new byte[512];
			int i = 0;
			while ((i = is.read(temp, 0, temp.length)) != -1) {
				os.write(temp, 0, temp.length);
			}
			os.close();
			is.close();
			user.setPhoto(os.toByteArray());
		} catch (Exception e) {
			e.printStackTrace();
		}
		Session session = openSession();
		Transaction transaction = session.beginTransaction();
		session.save(user);
		transaction.commit();
	}

	private static void getUserById() {
		Session session = openSession();
		User user = (User) session.get(User.class,
				"402881e432993eae0132993eb7d20000");
		byte[] photo = user.getPhoto();
		try {
			FileOutputStream os = new FileOutputStream("E:\\111.jpg");
			os.write(photo);
			os.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private static void update() {
		User user = new User();
		user.setId("402881e432993eae0132993eb7d20000");
		user.setName("新名");
		File photo = new File("I:\\2.jpg");
		try {
			FileInputStream is = new FileInputStream(photo);
			ByteArrayOutputStream os = new ByteArrayOutputStream();
			byte[] temp = new byte[512];
			int i = 0;
			while ((i = is.read(temp, 0, temp.length)) != -1) {
				os.write(temp, 0, temp.length);
			}
			os.close();
			is.close();
			user.setPhoto(os.toByteArray());
		} catch (Exception e) {
			e.printStackTrace();
		}
		Session session = openSession();
		Transaction transaction = session.beginTransaction();
		session.update(user);
		transaction.commit();
	}

	private static Session openSession() {
		Configuration cfg = new Configuration().configure();
		return cfg.buildSessionFactory().openSession();
	}

}
 
2
2
分享到:
评论

相关推荐

    JDBC+Hibernate将Blob数据写入Oracle

    以下是对“JDBC+Hibernate将Blob数据写入Oracle”这一主题的深入解析。 ### JDBC与Oracle BLOB的交互 #### 1. 理解Oracle BLOB特性 在Oracle中,BLOB用于存储大量的二进制数据,如图像文件。与传统的文本或数字...

    使用hibernate对oracle读取blob

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

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

    ### Hibernate 对 Blob 类型字段进行数据添加 #### 知识点概述 在处理数据库操作时,经常需要存储二进制大对象(Binary Large Object,简称 BLOB),例如图像、视频等非文本数据。BLOB 类型是数据库系统中用于存储...

    Hibernate对BLOB CLOB操作

    总之,Hibernate提供了对BLOB和CLOB的便利支持,允许开发者在Java应用中轻松地处理大数据对象,从而实现与数据库的高效交互。通过理解这些概念和操作方式,开发者能够更好地管理和存储大型数据。

    oracle,weblogic读写blob

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

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

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

    jdbc+hibernate存取blob字段

    但是,注意在写入BLOB数据时,依然需要将文件内容转换为`InputStream`,传递给Hibernate的`Blob`实现。 总结来说,无论是使用JDBC还是Hibernate,处理Oracle数据库的BLOB字段都需要了解其特殊性,尤其是BLOB字段的...

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

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

    spring+hibernate操作oracle的clob字段

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

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

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

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

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

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

    同时,为了提高效率,可以考虑将数据分块读写,特别是处理大文件时。此外,Clob类型通常用于存储文本数据,例如文章内容,与图片存储无关,但其处理方式与Blob类似,只是涉及到字符流而不是二进制流。在本例中,我们...

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

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

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

    1. **插入Blob数据**: 在Java中,我们需要先创建一个Blob对象,然后将其设置为PreparedStatement的参数。这通常涉及到读取本地文件并将其转换为字节数组,然后调用PreparedStatement的setBlob方法。例如: ```...

    springMvc+Oracle的图片转二进制流

    4. **创建数据表**:在Oracle数据库中创建一个专门用来存储图片二进制流的表,通常包含一个字段用于存储二进制数据,比如`BLOB`类型。 5. **持久化到数据库**:使用Hibernate或JDBC API将二进制流写入数据库。在...

    使用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对大字段的处理实例

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

Global site tag (gtag.js) - Google Analytics