刚刚解决一个图片存入数据库的问题,留个记录备查。
1、主要步骤
1.1配置hibernate:
1.1.1、配置hibernate的持久类文件中对应的字段为byte[]类型
1.1.2、配置hibernate的类映射文件中对应的字段type为
org.springframework.orm.hibernate3.support.BlobByteArrayType
1.2、配置spring:
1.2.1、配置nativeJdbcExtractor,如下:
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" />
1.2.2、配置oracleLobHandler
<bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">
<property name="nativeJdbcExtractor">
<ref bean="nativeJdbcExtractor" />
</property>
</bean>
1.2.3、把oracleLobHandler加入sessionFactory中:
<property name="lobHandler">
<ref bean="oracleLobHandler" />
</property
2、源代码
2.1.1、table_test_image
create table TABLE_TEST_IMAGE
(
ID VARCHAR2(40),
FID VARCHAR2(40),
IMG BLOB
)
2.1.2、Image.java
package ie.search.test.model;
public class Image {
private String id;
private String fid;
private byte[] img;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFid() {
return fid;
}
public void setFid(String fid) {
this.fid = fid;
}
public byte[] getImg() {
return img;
}
public void setImg(byte[] img) {
this.img = img;
}
}
2.1.3、Image.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="ie.search.test.model.Image" table="TABLE_TEST_IMAGE" >
<id name="id" type="java.lang.String">
<column name="ID" length="40" />
<generator class="sequence">
<param name="sequence">SEQ_TEST_IMAGE</param>
</generator>
</id>
<property name="fid" type="string">
<column name="FID" length="40">
<comment>外键</comment>
</column>
</property>
<property name="img" type="org.springframework.orm.hibernate3.support.BlobByteArrayType">
<column name="IMG" >
<comment>图片</comment>
</column>
</property>
</class>
</hibernate-mapping>
2.1.4、spring配置文件片段
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<!-- for Oracle9i ojdbc14.jar测试通过 -->
<bean id="nativeJdbcExtractor" lazy-init="true" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/>
<bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor">
<ref bean="nativeJdbcExtractor"/>
</property>
</bean>
<!-- Oracle9i over -->
<!-- for Oracle10g ojdbc14.jar测试通过-->
<!--
<bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.DefaultLobHandler">
</bean>
-->
<!-- Oracle10g over -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="lobHandler" ref="lobHandler"/>
<property name="mappingDirectoryLocations">
<list>
<value>classpath*:ie/bsp/modules/commonquery/model/</value>
<value>classpath*:ie/bsp/modules/reference/model/</value>
<value>classpath*:ie/bsp/modules/commcomponent/model/</value>
<value>classpath*:ie/bsp/modules/zone/model/</value>
<value>classpath*:ie/search/feature/featureTick/model/</value>
<value>classpath*:ie/search/feature/featureMosquito/model/</value>
<value>classpath*:ie/search/vector/tick/model/</value>
<value>classpath*:ie/search/feature/featureMouse/model/</value>
<value>classpath*:ie/search/feature/featureFlea/model/</value>
<value>classpath*:ie/perm/model/</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
</props>
</property>
</bean>
</beans>
2.1.5、存取图片的action代码段
public String saveImage(){
FileInputStream fis=null;
Image image=new Image();
image.setFid("1");
byte[] img=null;
try {
File f=new File("d:\\upload\\-1.jpg");
fis=new FileInputStream(f);
byte[] b=new byte[fis.available()];
fis.read(b);
fis.close();
img=b;
image.setImg(img);
imageDao.save2(image);
} catch (Exception e) {
e.printStackTrace();
}
imageDao.save2(image);
return "success";
}
public String readImage(){
System.out.println(this.getClass()+".readImage()...");
Image image=imageDao.get("21");
FileOutputStream fos=null;
try {
fos=new FileOutputStream("d:\\upload\\target1.jpg");
fos.write(image.getImg());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}
3、注意
<bean id="nativeJdbcExtractor"/>
用了c3p0连接池的情况下用: C3P0NativeJdbcExtractor
如果是dpcp连接池,则用:CommonsDbcpNativeJdbcExtractor
如果没有使用连接池,则用:SimpleNativeJdbcExtractor
其他的,用了jboss,weblogic连接池等等的情况,都有专门的Extractor对应。
分享到:
相关推荐
这个示例代码提供了SSH整合的实践应用,包括事务管理和Blob对象的处理,适用于Oracle 9i数据库。 首先,Struts是MVC(模型-视图-控制器)设计模式的一个实现,用于构建Web应用程序的前端控制层。它负责接收HTTP请求...
在Spring配置文件中,我们需要添加对Blob的支持。我们可以使用SimpleNativeJdbcExtractor作为JDBC抽取器,并使用OracleLobHandler来支持Oracle数据库。在SessionFactory配置中,我们需要添加OracleLobHandler支持。 ...
总的来说,Sequel Pro-Nightly作为一款针对Mac用户的MySQL客户端,凭借其对MySQL 8.0的全面支持、直观的BLOB内容显示、友好的用户界面以及强大的功能集,成为了数据库管理的利器。无论你是开发者、数据库管理员还是...
总之,实现SSH框架上传文件到Oracle并从Oracle下载文件到本地,需要结合Spring的文件上传支持、Struts2的Action处理、Hibernate的ORM功能以及Oracle数据库的操作,确保各个组件协同工作,完成文件的存取操作。...
2. **文件上传**:SSH框架支持文件上传,通常通过Struts2的上传组件实现,需要注意文件大小限制和安全性。 3. **操作日志记录**:可以利用Spring的AOP或JDK的动态代理来实现插件式操作日志记录。 4. **权限控制**...
- 在`img.jsp`文件中,通过`AblobDAO`和`AcmimgDAO`实现了对Blob类型的图片数据的读取和展示。 2. **分页显示**: - `index.jsp`文件通过传递参数`mpage`来实现图片的分页显示功能。 3. **属性设置**: - `...
Spring4是Spring框架的一个版本,提供了更好的性能和新特性,例如对Java 8的支持。Hibernate4相较于之前的版本,优化了查询性能,支持了更多的JPA标准,并引入了二进制大型对象(Blob/Clob)的处理。 “sshtest”...
2. **Spring**:Spring 是一个全面的后端应用框架,它不仅支持依赖注入(DI)和面向切面编程(AOP),还提供了大量企业级服务,如事务管理、数据源管理等。在这个项目中,Spring被用来管理Bean的生命周期,通过配置...
为了解决这个问题,需要在Spring配置文件中添加对LobHandler的支持。 ### 错误六:at java.util.Date.parse(Unknown Source) 这个错误发生在Java中解析日期字符串时。通常,原因是提供的日期字符串格式与`Date....
在这个系统中,Hibernate可能被用来处理学生信息、成绩数据的CRUD(创建、读取、更新、删除)操作,同时支持学生照片的存储和检索。 4. **MySQL数据库**:作为后端存储,MySQL是一个快速、可靠且免费的开源关系...
它支持复杂的数据类型,如BLOB、CLOB、NCLOB等,还提供了丰富的数据库特性,如索引、分区、存储过程、触发器等。在SSH框架中,通过JDBC驱动或者Hibernate的Session接口,可以与Oracle数据库进行交互。 【Eclipse...
描述中的"分页"功能可能通过Hibernate的Criteria或HQL查询实现,而"上传"和"下载"功能则可能涉及到Hibernate对BLOB类型字段的支持。 在"sshDemo"这个压缩包中,你应该能找到以下组成部分: 1. **源代码**:包括Java...
它支持复杂的数据类型,如BLOB、CLOB,以及高级的并发控制和数据安全特性。在SSH项目中,Oracle作为后端数据库,存储和管理应用程序的数据。 这个压缩包中的项目可能包含了以下部分: - src目录:包含项目的源代码...
在文件上传过程中,如果需要将文件存储到数据库,Hibernate可以帮助我们将文件数据转换为数据库中的BLOB类型字段。当然,这通常不建议,因为大文件存储在数据库中可能会导致性能问题。更常见的方式是将文件保存到...
本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本: •Struts 1.2 •Spring 1.2.5 •Hibernate 3.0 本文选用的数据库为Oracle 9i,当然你可以在不...
支持多个存储后端:本地文件系统,加密的本地文件系统,S3(兼容)对象存储,Google云存储,Azure Blob存储,SFTP。产品特点SFTPGo使用存储在“数据提供程序”中的虚拟帐户。 支持SQLite,MySQL,PostgreSQL,bbolt...
"导出Excle.zip"这个标题暗示我们关注的是一个用于前端Excel导出的压缩包,包含Blob.js和Export2Excel.js两个关键文件。这两个JavaScript库在实现Excel文件的创建和下载功能上起着重要作用。 首先,我们来看`Blob....
SSH提供了强大的MVC(Model-View-Controller)设计模式支持,使得开发高效、可维护的Web应用变得更加便捷。本实例详细讲解了如何在SSH框架下实现文件的上传和下载功能。 **Struts框架**在文件上传中的作用主要体现...