做了个简单的通告管理,在本机测试时数据量比较小。最开始用的时varchar2到2000,之后用hibernate中的text类型,对应数据库中的Clob类型。当数据量小于4000时,可以直接使用setObject()插入数据库。当数据量大于4000时。报错:socket write error。
查找了一些资料,说当数据量超过4000时,应该使用流方式操作。看到头昏昏,烦都烦死了......
最后发现Spring封装了对lob数据的操作,可以直接使用jdbcTemple操作lob数据。
当使用MySql、MSSQL、Oracle 10g时,使用DefaultLobHandler;使用Oracle 9i时使用OracleLobHandler。
示例代码:【转值javaWorld】
1 final File binaryFile = new File("c:\\workspace\\wish.jpg" );
2 final File txtFile = new File("c:\\workspace\\test.txt" );
3
4 final InputStream is = new FileInputStream(binaryFile);
5 final Reader reader = new FileReader(txtFile);
6
7 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
8
9 final LobHandler lobHandler = new DefaultLobHandler();
10
11 jdbcTemplate.execute("INSERT INTO test (txt, image) VALUES(?, ?)" ,
12 new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
13 protected void setValues(PreparedStatement pstmt, LobCreator lobCreator)
14 throws SQLException, DataAccessException {
15 lobCreator.setClobAsCharacterStream(pstmt, 1, reader, (int ) txtFile.length());
16 lobCreator.setBlobAsBinaryStream(pstmt, 2, is, (int ) binaryFile.length());
17 }
18 });
19
20 reader.close();
21 is.close();
22
读取代码:
1 final Writer writer = new FileWriter("c:\\workspace\\test_bak.txt" );
2 final OutputStream os = new FileOutputStream(new File("c:\\workspace\\wish_bak.jpg" ));
3
4 jdbcTemplate.query("SELECT txt,image FROM test WHERE id = ?" ,
5 new Object[] {new Integer(1 )},
6 new AbstractLobStreamingResultSetExtractor() {
7 protected void streamData(ResultSet rs) throws SQLException, IOException, DataAccessException {
8 FileCopyUtils.copy(lobHandler.getClobAsCharacterStream(rs, 1 ), writer);
9 FileCopyUtils.copy(lobHandler.getBlobAsBinaryStream(rs, 2 ), os);
10 }
11 });
12 writer.close();
13 os.close();
14
15
备注1:OracleLobHandler要求注入CommonsDbcpNativeJdbcExtractor,否则报错:要求使用OracleConnection,不可以使用Dbcp连接池。
1 < bean id = " lobHandler " class = " org.springframework.jdbc.support.lob.OracleLobHandler " >
2 < property name = " nativeJdbcExtractor " >
3 < bean class = " org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor " />
4 property >
5 bean >
备注2:Oracle驱动版本很多,要求使用正确的驱动。当驱动版本错误时,报错:无法释放LobHandler;无法关闭Writer;无法从套接字读取更多的信息。执行插入操作,但是Clob类型数据为空。
分享到:
相关推荐
在Spring框架中,LOB(Large Object)字段通常用于存储大数据,如BLOB(Binary Large Object)用于二进制数据,如图片或文档,CLOB(Character Large Object)...这些知识对于在Spring环境下处理大数据存储至关重要。
最后,当从数据库中读取LOB数据时,可以将其转换为文件或字符串: ```java Blob blob = myEntity.getImage(); InputStream blobInputStream = blob.getBinaryStream(); // 使用blobInputStream写出到文件... Clob ...
第11章:讲解了如何使用Spring JDBC进行数据访问操作,我们还重点讲述了LOB字段处理、主键产生和获取等难点知识。 第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到ORM...
11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的使用 11.4.2 如何规划主键方案 11.4.3 以行集返回数据 11.5 其他类型的JDBCTemplate 11.5.1 ...
当涉及到数据库操作,特别是处理大型二进制对象(Binary Large Object,简称BLOB)时,Spring提供了灵活且强大的支持。Oracle数据库是企业级应用广泛采用的关系型数据库系统,它也支持BLOB类型来存储大量的二进制...
由于这个库主要是针对Oracle数据库设计的,所以很多特定的方法可能只适用于Oracle,比如处理lob类型数据、序列或者触发器相关的操作。在使用时,需要根据Oracle的特性和JdbcTemplate的API进行适当调整。
根据提供的标题、描述以及部分代码内容,我们可以整理出关于如何在Spring框架中处理Oracle数据库中的BLOB类型数据的相关知识点。 ### 一、BLOB类型简介 BLOB(Binary Large Object)是二进制大对象的缩写,通常...
11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的使用 11.4.2 如何规划主键方案 11.4.3 以行集返回数据 11.5 其他类型的JDBCTemplate 11.5.1 ...
在IT领域,尤其是在Java开发中,Spring和Hibernate是两个非常重要的框架。...这个"spring1.2+hibernate2对大字段的处理实例"就是一个很好的学习资源,能够帮助开发者深入理解如何在旧版框架下处理这类问题。
第11章:讲解了如何使用Spring JDBC进行数据访问操作,我们还重点讲述了LOB字段处理、主键产生和获取等难点知识。 第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到...
在 Spring 中,`OracleLobHandler` 负责处理 Blob 类型的字段,确保与数据库驱动程序解耦,并适应不同数据库的 Lob 处理方式。数据表的 Blob 字段在 Java 对象中声明为 `byte[]` 类型,而在 Hibernate 映射文件中...
11. **@Lob**: 用于标记字段为Blob或Clob类型,用于存储大对象数据。 12. **@Basic(fetch = FetchType.LAZY)**: 结合@Lob使用,用于延迟加载大数据字段,提高性能。 13. **@Repository**: 标记数据访问组件,通常...
SpringMVC 是 Spring 框架的一个模块,专门用于处理Web应用的请求-响应模型,提供了一个轻量级的MVC架构。 **Hibernate ORM** Hibernate 是一个Java持久层框架,它简化了与关系数据库之间的交互。在Spring框架中,...
通过Spring Data JPA,开发者可以更加专注于业务逻辑的实现而非底层的数据访问细节。 #### 二、Spring Data JPA 核心概念与使用流程 ##### 2.1 核心概念 - **Repository**: Spring Data JPA 的核心接口,通过继承...
总结起来,"spring mvc+hibernate 图片存储至blob"这个主题涉及到Spring MVC处理文件上传、Hibernate将图片数据存入数据库BLOB字段、以及前后端交互等多个技术点。通过理解这些知识点,开发者可以构建一个完整的图片...
文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring中采用OracleLobHandler来处理Lob字段(包括Clob和Blob),由于在程序中不需要引用到oracle数据驱动程序的具体类且屏蔽了不同数据库处理Lob字段方法上的...
在Spring配置文件中,你需要创建一个`SessionFactory` bean,同时指定一个`lobHandler`属性,用于处理CLOB和BLOB类型的数据。这确保了Spring和Hibernate能够正确地与Oracle数据库交互处理大对象。 ```xml ...
本文将详细介绍如何在Spring与Hibernate框架结合的情况下,有效地处理Oracle 10g数据库中的CLOB字段。 #### 一、环境配置 为了确保项目能够顺利运行,首先需要搭建好开发环境。本示例中使用的环境配置如下: 1. *...
下载之后您只需要1.根据实体类创建数据库 2.jdbc.property填写正确 3.项目加载 运行 这里你将学习到: ...10 利用spring提供的lobHandler处理数据库中的lob列 11 利用log4j输出程序日志 12 无刷新翻页