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 最好发邮件哈 有现成的项目实例

相关推荐