看到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);
}
});
}
}
分享到:
相关推荐
标题“spring2.5.6示例 imagedb”指的是一个关于Spring框架2.5.6版本的应用实例,其中可能包含了一个名为“imagedb”的数据库管理或图像存储相关的项目。这个实例可能用来演示如何在Spring 2.5.6中配置、管理和操作...
`spring2.0 sample 之 imagedb`可能涉及到数据库操作,Spring的JDBC抽象层或ORM集成如Hibernate、JPA等。Spring通过声明式事务管理简化了数据库操作,使得开发者无需在代码中显式地开始和提交事务。 `spring2.0 ...
【标题】"ImageDB.rar" 是一个压缩包文件,很可能包含了一个与图像数据库相关的项目或应用。从文件名来看,这个项目可能涉及到两种不同的数据库系统——SQL和Access,用于存储和管理图像数据。 【描述】虽然描述...
1,小例子使用功能强大的Spring框架作为项目的管理框架。 2,数据层使用JDBC,并使用Spring提供的LobHandler来处理大个资源,如图片等。 3,项目中集成使用quartz来进行调度。 4,Web层使用Struts2实成文件的上传与...
标题与描述中的关键词“spring3.0MVC注解”指向了Spring框架中关于MVC架构的注解驱动功能,这是Spring3.0版本引入的重要特性之一,旨在简化Web应用程序的开发过程,使得开发者能够更加专注于业务逻辑而非框架本身。...
8. **错误处理和调试**:使用console.log、debugger语句或者像Sentry这样的错误追踪服务,可以帮助开发者定位并解决运行时的问题。 9. **测试**:为了保证代码质量,项目可能包含了单元测试(如Jest、Mocha)和集成...
ImageDB支持这些格式,意味着用户可以在同一平台上处理各种类型的图像,无需担心格式转换的问题。此外,"灵活、分级管理"这一特性意味着用户可以根据需要创建不同的目录结构、子目录和标签,对图片进行分类,以便...
【Spring MVC 学习文档】 Spring MVC 是 Spring 框架的一个模块,专门用于构建 Web 应用程序。它提供了一种模型-视图-控制器(MVC)架构,简化了开发过程,允许开发者将业务逻辑与表现层分离。在这个学习文档中,...
另一个示例是imagedb,它是一个基于注解的Web MVC应用程序,专注于无状态的multi-action控制器和多段文件上传处理,该示例位于“samples/imagedb”目录。 要使Spring MVC 3支持注解,关键在于DispatcherServlet的...
ImageDB是一款专为管理和存储各种图像格式设计的数据库系统,如JPEG、TIFF、GIF和PSD等。它提供了高效、灵活且分级的管理方案,使得用户能够方便地组织和检索大量的图像资源。 首先,让我们深入了解ImageDB的核心...
另一个示例应用 imagedb 则展示了无状态 multi-action 控制器以及多段文件上传的处理,位于 samples/imagedb 目录下。 Spring 3.0 MVC 的注解支持主要依赖于 `@RequestMapping`,它可以在类级别和方法级别使用。类...
Spring 3.0 的 MVC 框架引入了大量的注解,极大地简化了Web应用程序的开发。这些注解允许开发者在...结合实际的示例项目,如PetClinic和imagedb,学习和掌握Spring 3.0 MVC的注解将有助于构建高效、可维护的Web应用。
资源分类:Python库 所属语言:Python 资源全名:imagedb-0.1.0-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
图像数据库请注意ImageDB 目前不适合生产。 目前,它纯粹用于教育和测试目的。安装请确保已安装 Node.js 和 MongoDB,然后输入以下命令。 git clone ...
AROS图像,项目,数据,元数据和实验室自动化系统数据库。 当前,此存储库包含实际的postgres数据库和Web-GUI Image Viewer,但很快将分为两个单独的存储库,一个用于数据库,另一个用于Web接口。...
### Android中Bitmap数据存储与读取过程详解 #### 一、引言 在Android开发过程中,经常需要处理图片数据,而`Bitmap`类是用于在内存中存储位图的...需要注意的是,在实际项目中还需要考虑到性能优化和异常处理等问题。