1. 程式人生 > >Spring ,Hibernate clob大欄位處理

Spring ,Hibernate clob大欄位處理


1、首先資料表中的clob型別對應java持久化類的String型別;而blob型別對應byte[]型別

2、定義hibernate標籤時,持久化類中對應clob型別的屬性的hibernate type為         

         org.springframework.orm.hibernate.support.ClobStringType   ;

      而對應blob型別的屬性的hibernate type應為

         org.springframework.orm.hibernate.support.BlobByteArrayType。

       在 VO 的 hbm.xml 裡面的配置


       在Spring 配置檔案( applicationContext.xml ) 的配置

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

<bean id="nativeJdbcExtractor"
   class="org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor" />

<!-- 用於配置 oracle clob -->
<bean id ="oracleLobHandle" class ="org.springframework.jdbc.support.lob.OracleLobHandler" />


<bean id="sessionFactory"
   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
   destroy-method="close">

.........

..........

<!-- 用於配置 clob -->
   <property name ="lobHandler" >
        <ref bean ="oracleLobHandle" />
        </property>

</bean>

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

插入操作

DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
   
       String url = "jdbc:oracle:thin:@192.168.0.115:1521:rck";
       String userName = "scott";
       String password = "tiger";
      
     Connection conn =
          DriverManager.getConnection (url, userName, password);
     String   policyInfo=".....";   //假設這個變數很大
    
     for(int i=0;i<800;i++)
     {
      policyInfo+="美舍雅閣成為家庭化妝臺的主力品牌,我們是中國市場的第二個寶潔jj262361。";
     }
     /*   設定不自動提交   */  
     boolean   defaultCommit   =   conn.getAutoCommit();  
     conn.setAutoCommit(false);  
     try   {  
     /*   插入一個空的CLOB物件   */  
     Statement stmt = conn.createStatement();
    
     stmt.executeUpdate("INSERT   INTO   coinfo   VALUES   ('111',   EMPTY_CLOB(),'liuj')");  
     /*   查詢此CLOB物件並鎖定   */  
     ResultSet   rs   =   stmt.executeQuery("SELECT   c_context   FROM   coinfo   WHERE   c_id='111'   FOR   UPDATE");  
     while   (rs.next())   {  
     /*   取出此CLOB物件   */  
     oracle.sql.CLOB   clob   =   (oracle.sql.CLOB)rs.getClob("c_context");  
     /*   向CLOB物件中寫入資料   */  
     BufferedWriter   outt   =   new   BufferedWriter(clob.getCharacterOutputStream());  
     StringReader   in   =   new   StringReader(policyInfo);  
     int   c;  
     while   ((c=in.read())!=-1)   {  
             outt.write(c);  
     }  
     outt.flush();
     in.close();  
     outt.close();  
    
     System.out.println("成功~~~~~~~~~~~~~~~~~~~~~~~~~~~~");

     conn.commit();  
     }   catch   (Exception   ex)   {  
     /*   出錯回滾   */  
     conn.rollback();  
     throw   ex;  
     }  
      
     /*   恢復原提交狀態   */  
     conn.setAutoCommit(defaultCommit);