簡(jiǎn)單分析Hibernate讀取Clob
本文向大家介紹Hibernate讀取Clob,可能好多人還不了解Hibernate讀取Clob,沒(méi)有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。
Hibernate雖然對(duì)多種數(shù)據(jù)庫(kù)進(jìn)行了適應(yīng),以達(dá)到前臺(tái)感受不到后臺(tái)的數(shù)據(jù)庫(kù)類(lèi)型 ,但是在 Blob 和 Clob 這兩種類(lèi)型的存取方面不同的數(shù)據(jù)庫(kù)有不同的實(shí)現(xiàn)方法,這方面Hibernate就實(shí)在沒(méi)辦法了,在 mssql 中還好實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,但是我現(xiàn)在要說(shuō)的是 超級(jí)麻煩的Oracle ,我做的項(xiàng)目采用的數(shù)據(jù)庫(kù)就是Oracle ,不容質(zhì)疑Oracle的確是***的數(shù)據(jù)庫(kù),但是有些地方太復(fù)雜。
使用Hibernate讀取Clob 和 Blob 是跟往常一樣的,主要是保存。
具體的流程如下:
1、先創(chuàng)建一個(gè)只有一個(gè)字節(jié)的 Blob
2、使用flush 方法強(qiáng)勢(shì)Hibernate保存這個(gè)只有一個(gè)字節(jié)的 Blob
3、通過(guò)保存獲得了一個(gè)游標(biāo)
4、使用這個(gè)游標(biāo)來(lái)保存真正的數(shù)據(jù),對(duì)數(shù)據(jù)庫(kù)實(shí)施 update 操作
具體實(shí)現(xiàn)代碼如下:
- TUser user = new TUser();
- user.setImage(Hibernate.createBlob(new byte[1]));
- Transaction ex = session.beginTransaction();
- session.save(user);
- //強(qiáng)制保存這個(gè)blob
- session.flush();
- //通過(guò)刷新 user 來(lái)獲得blob游標(biāo)
- session.refresh(user,LockMode.UPGRADE);
- //寫(xiě)入真正的實(shí)際內(nèi)容
- oracle.sql.BLOB blob = (oracle.sql.BLOB)user.getImge();
- OutputStream out = blob.getBinaryOutputStream();
- FileInputStream img = new FileInputStream("c:\aaa.jpg");
- byte[] buf = new byte[10240];
- int len;
- while((len = img.read(buf)) > 0)
- ...{
- out.write(buf,0,len);
- }
- img.close();
- out.close();
- tx.commit();
Hibernate讀取Clob也是一樣的,只是創(chuàng)建的是一個(gè)空格的 String :user.setResume(Hibernate.createClob(" "));
【編輯推薦】