最近编程的时候遇到需要将文件存储到数据,就想到了Oracle的blob字段,但是在网上查询了一些资料,自己总结下,跟大家交流下,希望大家多多指教.
环境:jdk1.4+Spring2.5+hibernate3.1
如要hibernate能处理blob字段,则需要在配置数据源时加上如下代码:
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/>
<bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor">
<ref local="nativeJdbcExtractor"/>
</property>
</bean>
同时将该bean注入到sessionFactory中:
<property name="lobHandler">
<ref bean="oracleLobHandler"/>
</property>
一.保存
如果是long字段,在hibernate的配置文件如下:
<property column="data" lazy="false" name="data" type="text"/>
如果是blob字段,在hibernate的配置文件如下:
<property column="blobdata" lazy="false" name="blobdata" type="blob"/>
对于long字段在程序中可以直接定义为String类型并按照String类型进行处理
对于blob字段在程序中就需要特殊处理,在java中需要将blob字段声明为java.sql.Blob类型,此处有两种方式:
1.以FileInputStream方式写入到数据库:
Blob blobdata = Hibernate.createBlob(FileInputStream);
2.以byte[]方式写入到数据库:
Blob blobdata = Hibernate.createBlob(byte[]);
二.查询
查询一直没有解决如何用hibernate查出数据,如果直接使用hibernate的方法进行查询并获取blob的值,则总是报
需要登录数据的错误,这个问题如果有哪位高手知道处理的话希望不吝赐教.
String sql = "select blobdata from TABLE t where id=1"
try{
conn = session.connection();
pstmt = conn.prepareStatement(sql);
rst = pstmt.executeQuery();
if(rst.next()){
Blob blob = rst.getBlob("blobdata");
byte[] bt = blob.getBytes(1, (int) blob.length());
}
}catch(Exception e){
}finally{
rst.close();
pstmt.close();
conn.close();
this.releaseSession(session);
}
分享到:
相关推荐
在 Java 应用开发中,尤其是使用 ORM 框架如 Hibernate 进行持久化层开发时,如何高效地处理 BLOB 类型字段成为了一个关键问题。 本文档将详细介绍如何使用 Hibernate 对 Blob 类型字段进行数据添加的过程,并通过...
在Java的数据库编程中,...总结来说,无论是使用JDBC还是Hibernate,处理Oracle数据库的BLOB字段都需要了解其特殊性,尤其是BLOB字段的创建和更新过程。正确地操作BLOB字段,能够有效地存储和管理大容量的二进制数据。
本篇将详细介绍在Hibernate中如何处理Clob和Blob字段,以及使用特定Oracle JDBC驱动程序的优势。 首先,Hibernate通过`org.hibernate.type`包中的`ClobType`和`BlobType`来映射Clob和Blob。在实体类中,你需要定义...
例如,当保存BLOB字段时,可以先将文件内容读入`InputStream`,然后通过Hibernate的`Session`接口进行持久化: ```java InputStream inputStream = new FileInputStream("path/to/file"); session.saveOrUpdate...
总结来说,无论是通过JDBC还是Hibernate,写入Oracle数据库的Blob字段都需要先创建一个空Blob,然后获取其cursor,最后将二进制数据写入Blob。在JDBC中,这个过程涉及多个SQL语句和流操作;而在Hibernate中,通过ORM...
总结一下,处理Hibernate与MySQL BLOB字段的关键在于理解BLOB的特性和挑战,采用适当的数据处理策略,如流式操作、内存管理、事务控制以及数据库版本兼容性考虑。在实践中不断优化,可以提高代码的稳定性和性能。
在实体类中,你可以定义一个Blob类型的属性来表示数据库中的Blob字段: ```java @Entity public class MediaEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Lob ...
接下来,我们需要在映射文件(.hbm.xml)中配置Blob字段,比如: ```xml <hibernate-mapping> <!-- Blob类型的映射 --> <column name="PICTURE" length="1000000" sql-type="BLOB"/> </hibernate...
- LONG和LONG RAW:用于存储可变长的字符串数据和二进制数据,但有长度限制,每个表中只能有一个LONG字段,并且最长为2GB。 - CLOB(字符大对象):用于存储大型文本数据,与字符集相关联,支持文本型数据,如历史...
然而,Blob字段的写入方式与普通字段有所不同,因为它有自己的游标(cursor),需要通过特定步骤获取并操作这个游标来完成数据的写入。 以下是一个简单的JDBC示例,展示了如何将一个文件写入Oracle数据库中的Blob...
总结起来,"spring mvc+hibernate 图片存储至blob"这个主题涉及到Spring MVC处理文件上传、Hibernate将图片数据存入数据库BLOB字段、以及前后端交互等多个技术点。通过理解这些知识点,开发者可以构建一个完整的图片...
当处理大数据字段,如长文本、图片或视频等时,Hibernate提供了有效的方法来存储和检索这些数据。本示例将详细介绍如何在Hibernate中操作数据库的大字段。 首先,我们来理解“大字段”在数据库中的概念。在SQL标准...
本训练主要关注在使用Hibernate时如何处理与各种数据库字段类型的映射,这对于理解和优化数据库交互至关重要。 首先,我们要理解Hibernate的核心概念——对象关系映射(ORM)。ORM允许我们将数据库表结构映射到Java...
在关系型数据库中,BLOB字段可以存储最多4GB的二进制数据。在Hibernate中,BLOB类型通常映射到Java的`java.sql.Blob`接口。 1. **配置映射** 在Hibernate的映射文件(.hbm.xml)或使用注解的方式,我们需要为BLOB...
在Hibernate的映射文件(通常是XML格式)中,我们需要为Blob字段配置相应的元素: ```xml <hibernate-mapping> <blob name="avatar" column="avatar"/> </hibernate-mapping> ``` 在实际操作中,我们...
本主题“hibernate动态映射表处理Oracle的CLOB类型”主要聚焦于如何在Hibernate中有效地管理和操作CLOB字段。在Oracle 10g中,CLOB数据类型的处理有时会遇到一些挑战,尤其是在与ORM框架结合使用时。以下将详细介绍...
在Hibernate中,我们可以通过Session接口的saveOrUpdate()方法来保存包含Blob字段的对象。读取Blob数据时,可以使用Blob的getBinaryStream()方法。以下是一个简单的示例: ```java // 保存含Blob对象的数据 User ...