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