看到Spring文件夹里面的ImageDB应用例子,就想跑起来看看效果怎样。
如果使用Mysql数据库,修改一下DDL里面的content字段为LONGBLOB就可以很方便地将图片存储在MySql数据库中。
(MySQL的四种BLOB类型
类型 大小(单位:字节)
TinyBlob 最大 255B
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
)
在Oracle数据库(我用的是Oracle 11g XE)中却不是成功保存图片,一点击上传应用就卡住了,在Eclipse的高度窗口下,出现在很多Daemon进程。(一时找不出原因,我想可能是Oracle数据库版本以及Spring2.5对BLOB的一些兼容性上的问题。非常欢迎高人指正这个猜测)
于是我修改了一下存储图片的方法为如下,就可正常地在Oracle中存储图片了。
@Transactional
public void storeImage(final String name, final InputStream contentStream,
final int contentLength, final String description)
throws DataAccessException {
if (lobHandler instanceof OracleLobHandler) {
try {
PreparedStatement ptst = getConnection()
.prepareStatement(
"INSERT INTO IMAGEDB VALUES(? , EMPTY_BLOB() , EMPTY_CLOB())");
ptst.setString(1, name);
ptst.executeUpdate();
// Execute SQL statement
ptst = getConnection()
.prepareStatement(
"SELECT CONTENT ,DESCRIPTION FROM IMAGEDB WHERE IMAGE_NAME = ? FOR UPDATE");
ptst.setString(1, name);
ResultSet rs = ptst.executeQuery();
rs.next();
Blob contentBlob = rs.getBlob(1);
OutputStream blobOutputStream = ((BLOB) contentBlob)
.getBinaryOutputStream();
FileCopyUtils.copy(contentStream, blobOutputStream);
Clob descClob = rs.getClob(2);
Writer clobWriter = ((oracle.sql.CLOB) descClob)
.getCharacterOutputStream();
clobWriter.write(description);
clobWriter.close();
contentStream.close();
blobOutputStream.close();
getConnection().commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
getJdbcTemplate()
.execute(
"INSERT INTO imagedb (image_name, content, description) VALUES (?, ?, ?)",
new AbstractLobCreatingPreparedStatementCallback(
this.lobHandler) {
protected void setValues(PreparedStatement ps,
LobCreator lobCreator)
throws SQLException {
ps.setString(1, name);
lobCreator.setBlobAsBinaryStream(ps, 2,
contentStream, contentLength);
lobCreator.setClobAsString(ps, 3,
description);
}
});
}
}
分享到:
相关推荐
NULL 博文链接:https://thinktothings.iteye.com/blog/1143659
ImageDB.rarImageDB.rar
1,小例子使用功能强大的Spring框架作为项目的管理框架。 2,数据层使用JDBC,并使用Spring提供的LobHandler来处理大个资源,如图片等。 3,项目中集成使用quartz来进行调度。 4,Web层使用Struts2实成文件的上传与...
图片数据库、支持各种格式的图片、JPEG、TIFF、GIF、PSD,提供灵活、分级管理
ImageDB图片数据库、支持各种格式的图片、JPEG、TIFF、GIF、PSD,提供灵活、分级管理
资源分类:Python库 所属语言:Python 资源全名:imagedb-0.1.0-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
ImageDB_RPT
图像数据库请注意ImageDB 目前不适合生产。 目前,它纯粹用于教育和测试目的。安装请确保已安装 Node.js 和 MongoDB,然后输入以下命令。 git clone ...
AROS图像,项目,数据,元数据和实验室自动化系统数据库。 当前,此存储库包含实际的postgres数据库和Web-GUI Image Viewer,但很快将分为两个单独的存储库,一个用于数据库,另一个用于Web接口。...
cd /var/lib/docker/image/overlay2/imagedb/content/sha256 该目录即为 docker 中的所有镜像文件(以shar256加密方式加密后的镜像文件),我们通过 ll 查看一下: 删哪个呢?别慌,docker images 中的 IMAGE ID 就...
建筑学带有mongoDb的Docker 带有NodeJ的后端带有React的前端如何运行项目克隆存储库:旋转mongo imageDb docker docker run --name mongodb -p 27017:27017 -d mongo 导航到后端文件夹并执行以下命令; yarn --...
function response ( room , msg , sender , isGroupChat , replier , ImageDB , package ) { /* @String room : 메세지를 받은 방 이름 리턴 @String sender : 메세지를 보낸 상대의 이름 리턴 @Boolean ...
collect images from camera into folder imagedb/ face.recognize.CollectData VM: -Djava.library.path=<opencv>/build/lib2. train images to generate YML file under folder model/ face.recognize.Train VM: ...