REFS:http://blog.csdn.net/zjwlyl/article/details/51323052
项目中经常用到上传图片,上传后有两种保存方式:一种是以二进制流的形式保存到数据库中,数据库中的字段名定义为image;第二种是将图片保存到服务器上的某一文件夹下
,然后在数据库里存储一列该图片的保存路径。
对于第一种hibernate4之前的版本的处理方式是这样的,将实体中图片字段定义为Blob类型的,数据库中映射成image类型的,然后往实体中写入的时候如下:
- FileInputStream inputStream = new FileInputStream(file);
- Blob blob = Hibernate.createBlob(inputStream);
- cardInfo.setPhotoFile(blob);
但是当项目升级到hibernate4之后,因为hibernate4已经弃用了createClob和createBlob,所以如果仍然用上面的方式就会报题目中出现的错误,即“The method createBlob() is undefined for the type Hibernate”,如何解决这一问题呢,我们可以通过spring提供的基础工具类fileCopyUtils来解决这个问题,简单实用。spring对这个类的定义是这样的
Simple utility methods for file and stream copying.All copy methods use a block size of 4096 bytes,and close all affected streams when done.
Mainly for use within the framework,but also useful for application code.
我们通过 FileCopyUtils 的 copyToByteArray(File in) 方法就可以直接将文件内容读到一个 byte[] 中;另一个可用的方法是 copyToByteArray(InputStream in),它将输入流读取到一个 byte[] 中。废话少说,直接上解决方法:
首先是将实体中图片字段定义为二进制一维数组,如:private byte[] photoFile,该字段在数据库中映射的字段类型仍然是image类型的,然后你就可以轻松地通过下面这句话实现将图片文件写入到实体里了:
- byte[] fileArray = org.springframework.util.FileCopyUtils.copyToByteArray(file);
- cardInfo.setPhotoFile(fileArray);
相关推荐
### Hibernate 对 Blob 类型字段进行数据添加 #### 知识点概述 在处理数据库操作时,经常需要存储二进制大对象(Binary Large Object,简称 BLOB),例如图像、视频等非文本数据。BLOB 类型是数据库系统中用于存储...
Blob blob = Hibernate.getLobCreator(session).createBlob(is, -1); User user = new User(); user.setName("John Doe"); user.setPhoto(blob); session.save(user); transaction.commit(); // Retrieve ...
Blob picture = Hibernate.createBlob(fis); user.setPicture(picture); } catch (IOException e) { // 处理异常 } session.save(user); ``` 同样的,对于Clob类型,我们可以使用Reader来读取字符数据,然后...
### Blob、InputStream、byte 互转 在Java开发过程中,我们经常会遇到数据格式转换的问题,尤其是在处理二进制数据如图片、文件等时。本文将详细介绍如何实现`Blob`、`InputStream`、`byte[]`之间的相互转换,并...
Blob blob = Hibernate.createBlob(fis); Image image = new Image(); image.setImageData(blob); session.save(image); ``` 5. **检索图片**:从数据库中加载Image对象后,可以获取Blob对象,然后写入输出流...
在Hibernate中,`session.createBlob()`方法用于创建Blob对象,然后将输入流传递给它,即可完成Blob数据的加载。保存实体后,Hibernate会自动处理Blob数据的存储。 总结来说,JDBC和Hibernate都可以处理Oracle中的...
将`byte[]`转换为`Blob`,我们可以利用Hibernate库提供的静态方法`Hibernate.createBlob()`。例如: ```java Blob blob = Hibernate.createBlob(new byte[1024]); ``` 这行代码会创建一个新的`Blob`对象,其内容为...
Blob imageData = Hibernate.createBlob(fis); // 或者使用数据库驱动提供的Blob实现 Blob imageData = connection.createBlob(); imageData.setBinaryStream(1, fis, (int) imageFile.length()); ``` 4. **...
在Java的持久化框架Hibernate中,BLOB(Binary Large Object)数据类型被用来存储大量二进制数据,如图片、音频、视频或者大型文本文件。本文将深入探讨Hibernate如何读取BLOB类型的数据,以及在实际开发中需要注意...
如果通过身份验证的用户对存储库没有写访问权,则创建一个派生 请参阅了解更酷的功能创意! 拉请求欢迎! 用法 浏览器 直接从加载octokit-plugin-create-pull-request和 (或与内核兼容的模块) < script type =...
请注意,这只是一个基础示例,实际应用中需要考虑异常处理、事务管理和数据库连接管理。此外,`condition`需要替换为实际的筛选条件,`your_table`、`long_raw_column`和`blob_column`应替换为你的表名和列名。 ...
user.setAvatar(session.createBlob(inputStream)); session.save(user); transaction.commit(); session.close(); ``` 对于Clob,同样在实体类中添加相应属性和映射配置,但使用Clob类型。例如,假设User实体有一...
Blob blob = Hibernate.getLobCreator(session).createBlob(fis); preparedStatement.setBlob(1, blob); ``` 2. **查询Blob数据**: 查询Blob字段时,可以使用ResultSet的getBlob方法获取Blob对象。然后,我们...
这可能使用到如`JAXB`(Java Architecture for XML Binding)这样的库,它可以自动将Java对象绑定到XML表示。在`SerializUtil`中,可能有一个方法用于将对象转换为XML字符串,以及将XML字符串还原为对象。 4. **...
### Oracle中BLOB字段的读取与操作 #### 一、引言 在数据库系统中,BLOB(Binary Large Object)是一种用于存储大量...需要注意的是,在实际应用中还需要考虑异常处理、资源释放等问题,以确保程序的健壮性和稳定性。
Blob blob = Hibernate.createBlob(file.getBytes()); // 将blob对象存入数据库 } catch (IOException e) { e.printStackTrace(); } } else { return "上传的文件为空"; } return "文件上传成功"; } @...
以下是对使用JDBC4.0操作Oracle中BLOB类型数据的详细步骤: 首先,你需要在项目中引入Oracle JDBC驱动ojdbc6.jar,这是一个连接Oracle数据库的必备库。你可以在项目的类路径中添加这个jar包,通常将其放在/META-INF...
注意,需要先将文件内容转换为`InputStream`,再通过`Blob.createBlob()`创建Blob对象。 ```java File file = new File("path_to_your_file"); FileInputStream fis = new FileInputStream(file); Blob blob = ...
ADODBCommand.CommandText := 'SELECT ImageData FROM ImageTable FOR UPDATE'; ADODBQuery.Connection := ADODBConnection; ADODBQuery.Active := True; ADOLob := ADODBQuery.CreateBlob; ADODBQuery.Close...