<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 6  文章 - 129  trackbacks - 0
    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(14)

    隨筆檔案(6)

    文章分類(467)

    文章檔案(423)

    相冊

    收藏夾(18)

    JAVA

    搜索

    •  

    積分與排名

    • 積分 - 828831
    • 排名 - 49

    最新評論

    閱讀排行榜

    評論排行榜

    Struts+Spring+Hibernate處理Lob(Blob,Clob) 

      在使用struts+spring+hibernate的開發(fā)中,有些時候用戶會有數(shù)據(jù)庫存儲文件的需求,在數(shù)據(jù)庫中一般會采用
    Blob字段或Clob字段來存儲二進制圖片、流媒體或文件?,F(xiàn)就將在實際開發(fā)中遇到的問題及解決方法告之。

    一、問題需求:

     1.在持久化類中字段該用什么類型?
     2.在Struts中文件對應的數(shù)據(jù)類型是什么?
     3.在Hibernate中字段對應的類型是什么?
     4.如何在Spring中處理這些文件?

    二、解決方法:

     1.在數(shù)據(jù)庫中這些文件最終是以字節(jié)的形式存儲二進制對象,所以在持久化類中將相應的屬性定義為byte[]類型。

     2.在Struts中可以使用<html:file property="" />標簽來上傳文件,所以與之對應的ActionForm的屬性類型為:
    FormFile(org.apache.struts.upload.FormFile)類型,即使是使用了動態(tài)Form同理也是使用該類型.
    提示:同時要將form標簽修改為<html:form action="/Action.do" method="post" enctype="multipart/form-data">
    以支持文件上傳后取得上傳數(shù)據(jù)。在給持久對象賦值時只需調用(FormFile) form.get("property")).getFileData();
    方法即可返回byte[]。

     3.在Hibernate中文件列對應的類型可以是org.springframework.orm.hibernate3.support.BlobByteArrayType,
    org.springframework.orm.hibernate3.support.ClobStringType、clob、blob、binary。什么時候用BlobBYteArrayType
    什么時候用ClobStringType?一般如果要處理的對象是數(shù)據(jù)庫字段類型是blob時(主要是圖片,二進制對象等),
    映射文件設置為:org.springframework.orm.hibernate3.support.BlobByteArrayType 數(shù)據(jù)庫字段是clob(大文本對象)
    類型時,要將java的屬性的類型定為String,映射文件設置為: org.springframework.orm.hibernate3.support.ClobStringType。

     4.如果在spring上要使用Struts中自帶的上傳功能必須在spring的配置文件中加以聲明.否者將會出現(xiàn)?
    簀ava.lang.IllegalStateException: No LobHandler found for configuration - lobHandler property
    must be set on LocalSessionFactoryBean異常。配置如下:

     (1).聲明一個處理句柄:
      <bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />
     (2).在sessionFactory中注入lobHandler:
      <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
              <property name="lobHandler" ref="lobHandler"/>
      </bean>

     提示: 指定lobHandler時,對于MySQL、DB2、MS SQL Server、Oracle 10g,使用DefaultLobHandler即可,而Oracle 9i,
    則可以使用OracleLobHandler。因為Oracle9i處理lob的方式和不太一樣,所以這里要用spring提供的SimpleNativeJdbcExtractor.處理Oracle9i lob類型的特殊聲明:

    <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>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
      
     <!-- 為處理Blob類型字段的句柄聲明 -->
     <property name="lobHandler">
      <ref local="lobHandler" />
     </property>
    </bean>

    同時還應該使用對應的JDBC驅動。

    Clob字段定義:<property name="屬性名" column="列名" type="org.springframework.orm.hibernate.support.ClobStringType"
     length="1048"/>這里的length是指字節(jié),最大可以到2G.該字段在java對象中聲明為String類型。

         如果使用的是mysql數(shù)據(jù)庫其默認的上傳文件大小只有1047552字節(jié):如果上傳的文件大于1047552字節(jié)則會出現(xiàn)異常
    org.springframework.jdbc.UncategorizedSQLException: You can change this value on the server by setting
    the max_allowed_packet' variable.根據(jù)提示可以修改mysql數(shù)據(jù)庫的max_allowed_packet屬性大小。
    打開my.ini文件中找到# SERVER SECTION后在port=3306下面加上max_allowed_packet=?M 修改完后重啟mysql服務即可成功上傳。

    轉自:http://xinzhiz.javaeye.com/blog/111731


    posted on 2007-09-17 19:34 Ke 閱讀(2646) 評論(0)  編輯  收藏 所屬分類: struts+spring+hibernate
    主站蜘蛛池模板: 国产一精品一AV一免费| 亚洲精品又粗又大又爽A片| 国产精品hd免费观看| 亚洲Av无码乱码在线观看性色| 亚洲无mate20pro麻豆| 91嫩草国产在线观看免费| 亚洲国产精品网站久久| 国产大片线上免费看| 久久久久久久久无码精品亚洲日韩| 日韩高清在线高清免费| 国产亚洲一区二区三区在线| 国产区在线免费观看| 久久精品国产亚洲综合色| 精品国产免费一区二区三区香蕉| 亚洲精品综合一二三区在线| 鲁大师在线影院免费观看| 亚洲无吗在线视频| 免费午夜爽爽爽WWW视频十八禁| 国产97视频人人做人人爱免费| 人人狠狠综合久久亚洲88| 久久久久久夜精品精品免费啦| 亚洲天堂电影在线观看| 日本最新免费不卡二区在线| 成人特级毛片69免费观看| 亚洲av无码专区国产乱码在线观看| 91香蕉国产线在线观看免费| 中国亚洲呦女专区| 亚洲精品视频在线看| 日韩成人免费视频| 亚洲综合小说另类图片动图| 亚洲国产精品综合久久网络| 99精品视频在线免费观看| 亚洲中文字幕无码av| 国产亚洲成人久久| 国产一卡2卡3卡4卡2021免费观看| 国产精品无码亚洲一区二区三区| 亚洲精品少妇30p| 成人毛片18女人毛片免费96 | 日韩亚洲变态另类中文| 真实国产乱子伦精品免费| 最新亚洲人成无码网站|