问题描述: 如何把大对象类型的图片保存到db2中?
1. hibernate.cfg.xml 连接db2 的配置文件.
- <?xml version='1.0' encoding='GBK'?>
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <!--sessionfactory
- 关联特定数据库的全局性工厂
- 如果使用多个数据库,可以配置多个 session-factory
- -->
- <session-factory>
- <!-- 数据库连接驱动设置 连接ORACLE时 oracle.jdbc.OracleDriver -->
- <!-- 指定连接数据库用的驱动 -->
- <property name="connection.driver_class">
- com.ibm.db2.jcc.DB2Driver
- </property>
- <!-- 指定连接数据库的路径 -->
- <property name="connection.url">
- jdbc:db2://localhost:50000/mydb2
- </property>
- <!-- 指定连接数据库的用户名 -->
- <property name="connection.username">db2admin</property>
- <!-- 指定连接数据库的密码 -->
- <property name="connection.password">db2admin</property>
- <!-- schema -->
- <property name="default_schema">DB2ADMIN</property>
- <!-- 指定是否在SQL语句中输出便于调试的注释信息,
- db2必须设为false 否则查询时出错,oracle可以为true,
- 原因是db2注释为-- 而hibernate3的默认注释符为/**/
- 而db2不识别/**/ 所以在查询时会出错.
- -->
- <property name="use_sql_comments">false</property>
- <!-- 当show_sql属性为true时,表示当程序运行时在控制台输出SQL语句,默认为false -->
- <property name="show_sql">true</property>
- <!--指定是否按照标准格式在控制台上输出SQL语句-->
- <property name="format_sql">true</property>
- <!-- 指定数据库使用的SQL方言 -->
- <property name="dialect">
- org.hibernate.dialect.DB2Dialect
- </property>
- <!-- hibernate提供的默认数据库连接池的实现,一般仅用于开发调试
- 指定连接池的大小 10 -->
- <property name="connection.pool_size">10</property>
- <!-- 指定连接池 c3p0 hibernate 推荐的数据库连接池的实现,用于正式应用时
- <property name="hibernate.c3p0.max_size">50</property>
- <property name="hibernate.c3p0.min_size">1</property>
- <property name="hibernate.c3p0.timeout">5000</property>
- <property name="hibernate.c3p0.max_statements">100</property>
- <property name="hibernate.c3p0.idle_test_period">100</property>
- <property name="hibernate.c3p0.acquire_increment">2</property>
- -->
- <!-- 事务管理类型,这里我们用JDBC Transaction -->
- <property name="hibernate.transaction.factory_class">
- org.hibernate.transaction.JDBCTransactionFactory
- </property>
- <!-- 列出所有的映射文件,映射文件配置,注意配置文件名必须包含其相对与根的全路径 -->
- <mapping resource="com/soft/component/casebasicinfo/WxAjjbxx.hbm.xml" />
- </session-factory>
- </hibernate-configuration>
2.hibernate.hbm.xml 映射文件中blob的数据类型为:type="java.sql.Blob"
- <?xml version="1.0" encoding="GBK"?>
- <!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="com.soft.component.suspicionperson.WxFzxyr" table="WX_FZXYR">
- <comment>信息表</comment>
- <id name="id" type="java.lang.Long">
- <column name="ID" />
- <generator class="identity" /><!--db2自动增长主键-->
- </id>
- <property name="wxgzbh" type="java.lang.String">
- <column name="WXGZBH" length="23" not-null="true">
- </column>
- </property>
- <property name="xm" type="java.lang.String">
- <column name="XM" length="30" not-null="true">
- <comment>姓名</comment>
- </column>
- </property>
- <property name="csrq" type="java.sql.Date">
- <column name="CSRQ" length="10" not-null="true">
- <comment>出生日期 YYYY-MM-DD</comment>
- </column>
- </property>
- <!-- 大对象类型 -->
- <property name="zp" type="java.sql.Blob">
- <column name="ZP">
- <comment>照片300dpi</comment>
- </column>
- </property>
- </class>
- </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
- <?xml version="1.0" encoding="gbk"?>
- <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
- <struts-config>
- <data-sources />
- <form-beans>
- <form-bean name="addFzxryForm" type="org.apache.struts.action.DynaActionForm" ><!--动态formbean-->
- <form-property name="xm" type="java.lang.String"></form-property><!-- 姓名 -->
- <form-property name="csrq" type="java.sql.Date"></form-property><!--日期 日期必须要定义为 sqldate -->
- <form-property name="sfzh" type="java.lang.String"></form-property><!-- 证号 -->
- <form-property name="zp" type="org.apache.struts.upload.FormFile"></form-property><!-- 照片 -->
- </form-bean>
- </form-beans>
- <global-exceptions />
- <global-forwards />
- <action-mappings >
- <action
- attribute="addFzxryForm"
- input="/static/component/suspicionperson/AddFzxyr.jsp"
- name="addFzxryForm"
- parameter="method"
- path="/addFzxyr"
- scope="request"
- type="com.soft.struts.actions.suspicionperson.AddFzxyrAction">
- <forward name="failed" path="/static/errorpage/error-404.jsp" />
- <forward name="success" path="/static/component/suspicionperson/AddFzxyr.jsp" />
- </action>
- </action-mappings>
- <message-resources parameter="com.cgtech.struts.ApplicationResources" />
- <!-- 日期字符串为空("")时,转化为null -->
- <plug-in className="com.cgtech.struts.plugin.ConverterDatePlugIn" />
- </struts-config>
6.jsp 文件的类型用struts 标签: form 里的enctype="multipart/form-data",必须是该类型
- <html:form action="/addFzxyr?method=execute" method="post" onsubmit="return checkSave(this);" enctype="multipart/form-data">
- <table border="1">
- <tr>
- <td colspan="2" rowspan="5">
- <img id="img" onload="imgShow(this)" title="照片"/>
- </td>
- <td width="70">*工作编号</td>
- <td colspan="5">
- <html:text property="wxgzbh" styleClass="td3"/>
- </td>
- </tr>
- <tr>
- <td>*姓名</td>
- <td width="168">
- <html:text property="xm" styleClass="td3"/>
- </td>
- </tr>
- <tr>
- <tr>
- <td colspan="2">
- <!-- 上传按钮 -->
- <html:file property="zp" accept="image/gif" onchange="img.src=this.value" size="18" />
- </tr>
- </table>
- </html:form>
7. 保存后的效果: toad 查看数据库数据:
8.
8 保存成功!