hibernate和oracle关于图片的存储和读取
1:在applicationContext-*.xml的配置文件中
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" />
<beanid="oracleLobHandler"class="org.springframework.jdbc.support.lob.OracleLobHandler">
<propertyname="nativeJdbcExtractor"ref="nativeJdbcExtractor"></property>
</bean><bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.DefaultLobHandler"/>
2:在sessionFactory Bean中
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<propertyname="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
<propertyname="lobHandler">
<refbean="oracleLobHandler"/>
</property>
</bean>加入这个属性
<property name="lobHandler">
<refbean="oracleLobHandler"/>
</property>
3:配置实体的hibernate的*.hbm.xml<property name="person18" type="org.springframework.orm.hibernate3.support.BlobByteArrayType" length="1048576000">
<columnname="PERSON18"/>
</property>这个type是关键
在实体的 PERSON18 属性 的类型是byte[] ,配置基本结束
4:怎样存储呢?
这里是struts2+hibernate+spring 架构
在action中 private File[] upload; 这个upload其实就是jsp页面的上传<input type="file" name="upload"
在提交的时候 action中 开始把上传的图片set到实体的相关属性中去
InputStream in = null;
in = new BufferedInputStream(new FileInputStream(this.getUpload()[0]), BUFFER_SIZE);
byte[]buffer=newbyte[BUFFER_SIZE];
in.read(buffer);//把上传的图片set到 实体中去 person.setPerson18(buffer);
最好直接save实体就可以了
5:读取显示在页面
本人最初的想法是在action中把对象查出来,也就可以得到保存图片的byte[] ,然后放到request中,在页面直接读取,结果失败,
最后的解决办法是
jsp页面:
<img id="imgShow" width="100%" height="100%" src="imageAction.action?person01=${mk.person01}" alt="" />
后台action中
public String loadImage() throws Exception{
InputStreamfileInput=null;
Stringperson01=request.getParameter("person01");
Filedir=newFile(ServletActionContext.getServletContext().getRealPath("")+"/1.jpg");
Personp=super.getPersonService().getPersonById(Integer.parseInt(person01));
byte[]bs=p.getPerson18();
if(bs==null){
fileInput=newBufferedInputStream(newFileInputStream(dir),100*1024);
byte[]buffer=newbyte[100*1024];
inti=fileInput.read(buffer);
upLoadImg(buffer);
fileInput.close();
}else{
upLoadImg(bs);
}
return null;/**
*上传图片
*@parambs
*/
publicvoidupLoadImg(byte[]bs){
ServletOutputStreamout=null;
InputStreamin=null;
InputStreamin2=null;
try{
//二进制输出流
response.setContentType("image/jpeg");
//得到输出流
out=response.getOutputStream();
in=newjava.io.ByteArrayInputStream(bs);
//强制刷新输出流
out.write(bs);
out.flush();
}catch(IOExceptione){
e.printStackTrace();
}catch(Exceptione){
e.printStackTrace();
}finally{
if(in!=null){
try{
in.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
if(out!=null)try{
out.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}这样就可以了
如有疑问:qq 331887602 最好发邮件哈 有现成的项目实例