hibernate3 struts1.2 保存blob图片到 db2 8.1

问题描述: 如何把大对象类型的图片保存到db2中?

1. hibernate.cfg.xml  连接db2 的配置文件.

  1. <?xml version='1.0' encoding='GBK'?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3.           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4.           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  5. <hibernate-configuration>
  6.     <!--sessionfactory
  7.         关联特定数据库的全局性工厂       
  8.         如果使用多个数据库,可以配置多个 session-factory
  9.     -->
  10.     <session-factory>
  11.         <!-- 数据库连接驱动设置 连接ORACLE时 oracle.jdbc.OracleDriver -->
  12.         <!-- 指定连接数据库用的驱动 -->
  13.         <property name="connection.driver_class">
  14.             com.ibm.db2.jcc.DB2Driver
  15.         </property>     
  16.         <!-- 指定连接数据库的路径 -->
  17.         <property name="connection.url">
  18.             jdbc:db2://localhost:50000/mydb2
  19.         </property>
  20.         <!-- 指定连接数据库的用户名 -->
  21.         <property name="connection.username">db2admin</property>
  22.         <!-- 指定连接数据库的密码 -->
  23.         <property name="connection.password">db2admin</property>
  24.         <!-- schema -->
  25.         <property name="default_schema">DB2ADMIN</property>
  26.         
  27.         <!-- 指定是否在SQL语句中输出便于调试的注释信息, 
  28.             db2必须设为false 否则查询时出错,oracle可以为true,
  29.             原因是db2注释为-- 而hibernate3的默认注释符为/**/ 
  30.             而db2不识别/**/ 所以在查询时会出错.
  31.         -->     
  32.         <property name="use_sql_comments">false</property>
  33.         
  34.         <!-- 当show_sql属性为true时,表示当程序运行时在控制台输出SQL语句,默认为false -->
  35.         <property name="show_sql">true</property>
  36.         
  37.         <!--指定是否按照标准格式在控制台上输出SQL语句-->
  38.         <property name="format_sql">true</property>
  39.                 
  40.         <!-- 指定数据库使用的SQL方言 -->
  41.         <property name="dialect">
  42.             org.hibernate.dialect.DB2Dialect
  43.         </property>
  44.         
  45.         <!-- hibernate提供的默认数据库连接池的实现,一般仅用于开发调试
  46.              指定连接池的大小 10 -->
  47.         <property name="connection.pool_size">10</property>
  48.         
  49.         <!--  指定连接池 c3p0 hibernate 推荐的数据库连接池的实现,用于正式应用时
  50.         <property name="hibernate.c3p0.max_size">50</property>
  51.         <property name="hibernate.c3p0.min_size">1</property>
  52.         <property name="hibernate.c3p0.timeout">5000</property>
  53.         <property name="hibernate.c3p0.max_statements">100</property>
  54.         <property name="hibernate.c3p0.idle_test_period">100</property>
  55.         <property name="hibernate.c3p0.acquire_increment">2</property>          
  56.         -->     
  57.         <!-- 事务管理类型,这里我们用JDBC Transaction  -->
  58.         <property name="hibernate.transaction.factory_class">
  59.             org.hibernate.transaction.JDBCTransactionFactory
  60.         </property>
  61.                 
  62.         
  63.         <!-- 列出所有的映射文件,映射文件配置,注意配置文件名必须包含其相对与根的全路径 -->
  64.         <mapping resource="com/soft/component/casebasicinfo/WxAjjbxx.hbm.xml" />
  65.         
  66.     </session-factory>
  67. </hibernate-configuration>

2.hibernate.hbm.xml 映射文件中blob的数据类型为:type="java.sql.Blob"

  1. <?xml version="1.0" encoding="GBK"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  4. <!-- 
  5.     Mapping file autogenerated by MyEclipse Persistence Tools
  6. -->
  7. <hibernate-mapping>
  8.     <class name="com.soft.component.suspicionperson.WxFzxyr" table="WX_FZXYR">
  9.         <comment>信息表</comment>
  10.         <id name="id" type="java.lang.Long">
  11.             <column name="ID" />
  12.             <generator class="identity" /><!--db2自动增长主键-->
  13.         </id>
  14.         <property name="wxgzbh" type="java.lang.String">
  15.             <column name="WXGZBH" length="23" not-null="true">
  16.             </column>
  17.         </property>
  18.         <property name="xm" type="java.lang.String">
  19.             <column name="XM" length="30" not-null="true">
  20.                 <comment>姓名</comment>
  21.             </column>
  22.         </property>
  23.         <property name="csrq" type="java.sql.Date">
  24.             <column name="CSRQ" length="10" not-null="true">
  25.                 <comment>出生日期 YYYY-MM-DD</comment>
  26.             </column>
  27.         </property>
  28.         <!-- 大对象类型 -->
  29.         <property name="zp" type="java.sql.Blob">
  30.             <column name="ZP">
  31.                 <comment>照片300dpi</comment>
  32.             </column>
  33.         </property>
  34.     </class>
  35. </hibernate-mapping>

 

3.持久化类文件的类型为:java.sql.Blob 类型。

 

private Blob zp; //照片

  public Blob getZp() {
      return this.zp;
 }

 public void setZp(Blob zp) {
      this.zp = zp;
 }

4. Struts action 里的方法。
    byte[] buf =  ((FormFile) addFzxyrForm.get("zp")).getFileData();
   Blob ph= Hibernate.createBlob(buf);//数据转换为blob类型

    //持久化类的实例.setZp(ph);
   fzxyr.setZp(ph);

  fzxyrDao.save(fzxyr);//调用持久化类的dao方法 保存.

 

5.struts配置文件中的数据类型 。动态formbean中的数据类型:  org.apache.struts.upload.FormFile

 

  1. <?xml version="1.0" encoding="gbk"?>
  2. <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
  3. <struts-config>
  4.   <data-sources />
  5.   <form-beans>
  6.    <form-bean name="addFzxryForm" type="org.apache.struts.action.DynaActionForm" ><!--动态formbean-->
  7.     <form-property name="xm" type="java.lang.String"></form-property><!-- 姓名 -->    
  8.     <form-property name="csrq" type="java.sql.Date"></form-property><!--日期 日期必须要定义为 sqldate -->     
  9.     <form-property name="sfzh" type="java.lang.String"></form-property><!-- 证号 -->
  10.     <form-property name="zp" type="org.apache.struts.upload.FormFile"></form-property><!-- 照片 -->       
  11.    </form-bean>
  12.   </form-beans>
  13.   
  14. <global-exceptions />
  15.   <global-forwards />
  16.   <action-mappings >
  17.     <action
  18.       attribute="addFzxryForm"
  19.       input="/static/component/suspicionperson/AddFzxyr.jsp"
  20.       name="addFzxryForm"
  21.       parameter="method"
  22.       path="/addFzxyr"
  23.       scope="request"
  24.       type="com.soft.struts.actions.suspicionperson.AddFzxyrAction">
  25.       <forward name="failed" path="/static/errorpage/error-404.jsp" />
  26.       <forward name="success" path="/static/component/suspicionperson/AddFzxyr.jsp" />
  27.     </action>
  28.    
  29.    </action-mappings>
  30.   <message-resources parameter="com.cgtech.struts.ApplicationResources" />
  31.   
  32.   <!-- 日期字符串为空("")时,转化为null -->
  33.   <plug-in className="com.cgtech.struts.plugin.ConverterDatePlugIn" />
  34.   
  35. </struts-config>

 

6.jsp 文件的类型用struts 标签: form 里的enctype="multipart/form-data",必须是该类型

 

  1. <html:form action="/addFzxyr?method=execute" method="post" onsubmit="return checkSave(this);" enctype="multipart/form-data">
  2.   <table border="1">
  3.     <tr>
  4.       <td colspan="2" rowspan="5">
  5.       <img id="img" onload="imgShow(this)" title="照片"/>      
  6.      </td>
  7.       <td width="70">*工作编号</td>
  8.       <td colspan="5">
  9.        <html:text property="wxgzbh" styleClass="td3"/>
  10.      </td>
  11.     </tr>
  12.     <tr>
  13.       <td>*姓名</td>
  14.       <td width="168">
  15.        <html:text property="xm" styleClass="td3"/>      
  16.       </td>
  17.     </tr>
  18.     <tr>
  19.      <tr>
  20.       <td colspan="2">
  21.        <!-- 上传按钮 -->
  22.        <html:file property="zp" accept="image/gif" onchange="img.src=this.value" size="18" />    
  23. </tr>
  24. </table>
  25. </html:form>

7. 保存后的效果: toad 查看数据库数据:

 

 

8.

 

 

8  保存成功!

 

 

 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值