Spirng 對clob blob資料的處理

來源:互聯網
上載者:User

在Hibernate中檔案列對應的類型可以是org.springframework.orm.hibernate3.support.BlobByteArrayType,
org.springframework.orm.hibernate3.support.ClobStringType、clob、blob、binary。什麼時候用BlobBYteArrayType
什麼時候用ClobStringType?一般如果要處理的對象是資料庫欄位類型是blob時(主要是圖片,二進位對象等),
對應檔設定為:org.springframework.orm.hibernate3.support.BlobByteArrayType 資料庫欄位是clob(大文字物件)
類型時,要將java的屬性的類型定為String,對應檔設定為: org.springframework.orm.hibernate3.support.ClobStringType。

4.如果在spring上要使用Struts中內建的上傳功能必須在spring的設定檔中加以聲明.否者將會出現?
簀ava.lang.IllegalStateException: No LobHandler found forconfiguration - 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是指位元組,最大可以到2G.該欄位在java對象中聲明為String類型。

       如果使用的是mysql資料庫其預設的上傳檔案大小只有1047552位元組:如果上傳的檔案大於1047552位元組則會出現異常
org.springframework.jdbc.UncategorizedSQLException: You can change this value on the server by setting
the max_allowed_packet' variable.根據提示可以修改mysql資料庫的max_allowed_packet屬性大小。
開啟my.ini檔案中找到# SERVER SECTION後在port=3306下面加上max_allowed_packet=?M 修改完後重啟mysql服務即可成功上傳。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.