1、首先要知道的
(1)不同数据库中对应clob,blob的类型:
mysql中 : clob对应text blob对应blob
db2/oracle中 clob对应clob blob对应blob
(2)domain中对应类型:
clob 对应 String blob 对应 byte[]
clob 对庆 java.sql.Clob blob 对应 java.sql.Blob
(3)hibernate配置文件中对应类型:
clob > clob blob > binay
也可以直接使用数据库提供类型,例如:oracle.sql.Clob,oracle.sql.Blob。
2、jdbc操作clob (以oracle为例)
首先操作clob/blob不像操作varchar类型那样简单,插入步骤一般为两步:第一步插入一个空值,第二步锁住此行,更新clob/blob字段.
//插入空值 conn.setAutoCommit(false); String sql = "insert into file(name,file_content) values("jack",EMPTY_CLOB()); PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.executeUpdate(); //锁住此行 String sql = "select file_content from file where name='jack' for update"; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); oracle.sql.Clob clob = (oracle.sql.Clob)rs.getClob(1); java.io.OutputStream writer = clob.getAsciiOutputStream(); byte[] temp = newFileContent.getBytes(); writer.write(temp); writer.flush(); writer.close(); // pstmt.close(); 读取内容: oracle.sql.Clob clob = rs.getClob("file_content"); if(null!=clob) { Reader is = clob.getCharacterStream(); BufferedReader br = new BufferedReader(is); String s = br.readLine(); while (s != null) { content += s + "<br>"; s = br.readLine(); } }
3、jdbc操作blob
conn.setAutoCommit(false); String sql = "insert into photo(name,photo) values("jack",empty_blob()); pstmt = conn.prepareStatement(sql); pstmt = conn.executeUpdate(); // sql = "select photo from photo where name='jack'"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(sql); if(rs.next()) oracle.sql.Blob blob = (oracle.sql.Blob)rs.getBlob(1); //write to a file File file = new File("c:\\test.rar"); FileInputStream fin = new FileInputStream(file); OutputStream out = blob.getBinaryOutputStream(); int count = -1, total = 0; byte[] data = new Byte[blob.getBufferSize()]; while ((count = fin.read(data)) != -1) { total += count; out.write(data, 0, count); }
4、hibernateth处理clob
MyFile file = new Myfile(); file.setName("jack"); file.setContent(hibernate.createClob("")); session.save(file); session.flush(); session.refresh(file,LockMode.UPGRADE); oracle.sql.Clob clob = (oracle.sql.Clob)file.getContent(); Writer pw = clob.getCharacterOutputStream(); pw.write(longText);//写入长文本 pw.close(); session.close();
5、使用hibernate处理blob
原理基本相同: Photo photo = new Photo(); photo.setName("jack"); photo.setPhoto(hibernate.createBlob(""))://放一个空值 session.save(photo); session.flush(); // session.refresh(photo,LockMode.UPGRADE); //锁住此对象 oracle.sql.Blob blob = photo.getPhoto();//取得此blob的指针 OutputStream out = blob.getBinaryOutputStream(); //写入一个文件 File f = new File("c:\\test.rar"); FileInputStream fin = new FileInputStream(f); int count = -1, total = 0; byte[] data = new byte[(int)fin.available()]; out.write(data); fin.close(); out.close(); session.flush();
相关推荐
这篇文章主要讲解了如何使用`JDBC`和`Hibernate`这两种不同的方式来处理`CLOB`和`BLOB`字段。 1. **数据库中的`CLOB`与`BLOB`类型** - 在MySQL中,`CLOB`对应`TEXT`类型,`BLOB`对应`BLOB`类型。 - 在DB2或Oracle...
本篇将详细介绍在Hibernate中如何处理Clob和Blob字段,以及使用特定Oracle JDBC驱动程序的优势。 首先,Hibernate通过`org.hibernate.type`包中的`ClobType`和`BlobType`来映射Clob和Blob。在实体类中,你需要定义...
在 Java 中,处理 Clob 和 Blob 类型需要使用特殊的注解配置来确保正确地读取和写入数据。 一、Clob 类型的注解配置 在 Java 中,处理 Clob 类型需要使用 @Lob 注解来指定该字段为大规模字符数据类型。@Lob 注解...
在Hibernate的`SessionFactory`配置中,需要指定`lobHandler` Bean来处理CLOB和BLOB字段: ```xml <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> ...
在Java的持久化框架Hibernate中,处理大数据类型如BLOB(Binary Large Object)和CLOB(Character Large Object)是一项常见的任务。BLOB用于存储二进制数据,如图片、视频或文档,而CLOB则用于存储大文本数据,如...
综上所述,使用Hibernate和JDBC读取Oracle数据库中的Blob数据涉及多个步骤,包括实体类的设计、数据库操作和文件流的处理。理解这些知识点对于处理大对象存储至关重要。在实际项目中,根据需求和性能考虑,选择合适...
Spring和Hibernate框架结合使用可以有效地进行CLOB字段的操作。以下是实现这一功能的关键步骤和注意事项: 1. **配置SessionFactory** 在Spring配置文件中,你需要创建一个`SessionFactory` bean,同时指定一个`...
Hibernate也支持直接使用Clob对象进行映射,这意味着在实体类中直接使用Clob类型的字段,然后在Hibernate的映射文件中进行相应的配置。这种方式适合处理大数据量的文本,因为它允许直接与数据库的Clob类型进行交互...
例如,当保存BLOB字段时,可以先将文件内容读入`InputStream`,然后通过Hibernate的`Session`接口进行持久化: ```java InputStream inputStream = new FileInputStream("path/to/file"); session.saveOrUpdate...
其中,`imageData`是Blob字段,用于存储图片数据。 3. **读取图片并转换为Blob** 使用`FileInputStream`读取图片文件,然后将其转换为`Blob`对象。可以使用`PreparedStatement`的`setBlob()`方法将Blob对象设置为...
### Struts2框架介绍 Struts2是一个基于Java语言...同时,对于未来技术选型,Oracle数据库推荐优先考虑使用CLOB和BLOB类型来存储大型数据,因为这些类型比LONG类型拥有更好的特性,例如更大的容量和更好的操作灵活性。
在Hibernate配置文件(hibernate.cfg.xml)中,确保已经正确设置了数据库连接参数,并且JDBC驱动支持大字段的处理。对于支持大字段的数据库,如MySQL,Oracle等,通常不需要额外配置。 **二、实体类** 在实体类中...
在Spring框架中,LOB(Large Object)字段通常用于存储大数据,如BLOB(Binary Large Object)用于二进制数据,如图片或文档,CLOB(Character Large Object)用于字符数据,如长文本。本篇文章将深入探讨如何在...
- 存储CLOB/BLOB类型数据 - 自定义数据类型 - 使用Hibernate提供的类型 #### 四、ID生成策略 - **项目:hibernate_0400_ID** - 使用XML定义ID生成策略 - 注解方式通过`@GeneratedValue`指定ID生成规则 - ...
- 用于大对象类型,如 BLOB 和 CLOB。 9. **@Version** - 用于乐观锁机制。 10. **@Transient** - 表示某个属性不会被持久化到数据库。 #### 五、小结 通过上述示例,我们了解了如何使用 Hibernate 注解来...
- **CLOB/BLOB 类型处理**:介绍如何处理大文本(CLOB)和大数据块(BLOB)类型的字段。 - **自定义数据类型**:通过实现 `org.hibernate.usertype.UserType` 接口来自定义数据类型。 通过以上内容的学习,可以全面...