MDA/MDD/TDD/DDD/DDDDDDD
          posts - 536, comments - 111, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          hibernate處理LOB

          Posted on 2009-07-31 00:05 leekiang 閱讀(926) 評論(0)  編輯  收藏 所屬分類: hibernate
          1,摘自http://www.javaeye.com/topic/13335
          Oracle9iR2和Oracle10G以上版本已經可以直接進行clob的插入,條件查詢,模糊查詢了。這一點,你可以試一試,我這周周一剛剛在 Oracle10.1.0.3 Linux x86上面試過,不管是where還是like,就像varchar2一樣處理。
          另外將Oracle JDBC Driver升級到最新的版本,即Oracle10.1.0版本同時發布的odjbc14.jar,那么你將直接可以對clob進行操作。
          也就是說,如果你使用最新的Oracle JDBC Driver,使用比較新的Oracle版本,你就可以直接像操作varchar2那樣操作clob,沒有任何限制了。
          4000字符的限制完全是因為Oracle的Thin Driver造成的,用OCI Driver是不會有這個問題的。也就是說,這個限制與驅動相關與數據庫無關。
          我試過使用10g的驅動跑9i的數據庫,操作CLOB字段就和操作varchar2一樣,并且沒有4000的限制。一換成9i的Driver就錯誤依舊。。。8i的沒有測試過,不過原理應該一樣。
          像Robbin說的那樣,我用的是最新的最新的Oracle Database 10g (10.1.0.2.0) 驅動程序,數據庫是Release 9.2.0.1.0 ,插入一條10萬多字符的數據到clob類型的字段,拋出異常:Caused by: java.sql.SQLException: setString 只能處理少于 32766 個字符的字符串。我試了多次,還是無法解決。
          Robbin說的沒錯,我試過了在xxx.hbm.xml中將數據庫中Clob類型的字段映射成Hibernate的text類型,沒有任何限制,但是映射成java.lang.String類型卻有32K大小的限制。
          oracle 10g 的驅動的確好
          thin driver 也能順利按照 String 方式處理 Clob 字段,可以適用于 8.16 以后的所有版本
          映射成text在同一列中有多個clob字段的時候有bug,
          保存時會將后一個字段的內容保存到前一個字段里面去,不知道什么原因,我實在有些莫名其妙。
          換成spring的ClobStringType后一切正常
          經測試,使用 Oracle 10g 的 JDBC 驅動,可以把 LONG 類型的字段當成超長的 VARCHAR2 類型字段看待。
          注意:數據庫中應該使用 LONG 型,而不是 CLOB 類型。使用 CLOB 類型,如果有中文,會莫名其妙的丟掉一些字符。這應該是 Oracle 的一個 bug。
          適用于 Oracle 9.2 以上版本的數據庫。(注意僅僅是使用 10g 的 JDBC 驅動而已,即 ojdbc14.jar 包)

          參考:
          * Oracle JDBC 驅動下載地址 http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html
          * Handling CLOBs - Made easy with Oracle JDBC 10g http://www.oracle.com/technology/sample_code/tech/java/codesnippet/jdbc/clob10g/handlingclobsinoraclejdbc10g.html
          主站蜘蛛池模板: 工布江达县| 兴安县| 邓州市| 扶绥县| 松潘县| 德钦县| 临江市| 常德市| 徐闻县| 晋江市| 霸州市| 天门市| 冀州市| 嵊泗县| 武宁县| 邵阳市| 青川县| 喀喇沁旗| 沾化县| 东宁县| 龙州县| 铜鼓县| 南城县| 榆树市| 肃宁县| 北碚区| 益阳市| 元江| 孟连| 忻城县| 连云港市| 贡山| 启东市| 旬邑县| 招远市| 沙湾县| 青浦区| 绥宁县| 靖西县| 都兰县| 自治县|