天天看點

Hibernate操作Oracle中clob、blob總結

一、差別與定義

LONG: 可變長的字元串資料,最長2G,LONG具有VARCHAR2列的特性,可以存儲長文本一個表中最多一個LONG列

LONG RAW: 可變長二進制資料,最長2G

CLOB: 字元大對象Clob 用來存儲單位元組的字元資料

NCLOB: 用來存儲多位元組的字元資料

BLOB: 用于存儲二進制資料

BFILE: 存儲在檔案中的二進制資料,這個檔案中的資料隻能被隻讀訪。但該檔案不包含在資料庫内。

[size=x-small][color=blue]bfile字段實際的檔案存儲在檔案系統中,字段中存儲的是檔案定位指針.bfile對oracle來說是隻讀的,也不參與事務性控制和資料恢複。[/color][/size]

二、clob、blob實作方式

1、[color=red]Clob字段[/color] - 注解方式的實作

2、[color=red]Clob字段[/color] - 映射檔案的實作

3、[color=blue]Blob字段[/color] - 注解方式的實作

4、[color=blue]Blob字段[/color] - 映射檔案的實作

1、[color=red]Clob字段[/color] - 注解方式的實作

Hibernate 配置檔案:hibernate.cfg.xml

測試程式:

[size=large][color=blue]提示:[/color][/size]

[color=red]1. 在Oracle10g + 10g驅動(或者Oracle11g + 11g驅動)的環境下,隻需要在Clob字段上,增加注解@Column(name = "CONTENT", columnDefinition = "CLOB"),即可成功實作建表、Clob字段的讀寫操作。

2. 在Oracle9i+9i的驅動環境下,僅增加注釋@Column(name = "CONTENT", columnDefinition = "CLOB")時,建表、寫人資料均能正常,但讀取時會顯示資料為空。如果在Oracle9i下又必須用9i的驅動,可以在Clob字段中再增加一行注解@Lob 或者 @Type(type = "text")。([color=blue]運用spring中org.springframework.jdbc.support.lob.OracleLobHandler,這個沒有具體實踐過,就不在本文展開了[/color] )

3. 在Oracle9i+10g的驅動環境下,增加注解@Column(name = "CONTENT", columnDefinition = "CLOB"),同樣可以成功實作建表、Clob字段的讀寫操作,可見9i的驅動對Clob支援不是很好,但10g、11g已經做了更新。[/color]

2、[color=red]Clob字段[/color] - 映射檔案的實作

Bean檔案:

映射檔案:tb_bigstr.hb.xml

在hibernate.cfg.xml檔案中增加域對象的映射檔案:

測試程式:

[size=large][color=blue]提示:[/color][/size]

[color=red]如果是映射檔案的,隻需要把Clob字段的類型指定為text即:type="text"。

[/color]

3、Blob字段 - 注解 方式的實作

在hibernate.cfg.xml中增加域對象:

<mapping  class="michael.hibernate.bigstring.oracle.TbBigStrBlob" /> 
           

運作測試程式:

[size=large][color=blue]提示:[/color][/size]

[color=red]對于byte[] 類型的字段如果要映射成Blob字段,隻需要在該字段增加如下注解即可:[/color]

4、Blob字段 - 映射檔案的實作

bean檔案

映射檔案:tb_bigstr.hb.xml

測試程式:

[size=large][color=blue]提示[/color][/size]

[color=red]對于是映射檔案的方式,Blob字段的類型指定為binary即:type=" binary "。

[/color]

本文轉自:http://sjsky.iteye.com/blog/1154916