簡單分析Hibernate讀取Clob
本文向大家介紹Hibernate讀取Clob,可能好多人還不了解Hibernate讀取Clob,沒有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會你更多東西。
Hibernate雖然對多種數(shù)據(jù)庫進行了適應,以達到前臺感受不到后臺的數(shù)據(jù)庫類型 ,但是在 Blob 和 Clob 這兩種類型的存取方面不同的數(shù)據(jù)庫有不同的實現(xiàn)方法,這方面Hibernate就實在沒辦法了,在 mssql 中還好實現(xiàn)起來比較簡單,但是我現(xiàn)在要說的是 超級麻煩的Oracle ,我做的項目采用的數(shù)據(jù)庫就是Oracle ,不容質(zhì)疑Oracle的確是***的數(shù)據(jù)庫,但是有些地方太復雜。
使用Hibernate讀取Clob 和 Blob 是跟往常一樣的,主要是保存。
具體的流程如下:
1、先創(chuàng)建一個只有一個字節(jié)的 Blob
2、使用flush 方法強勢Hibernate保存這個只有一個字節(jié)的 Blob
3、通過保存獲得了一個游標
4、使用這個游標來保存真正的數(shù)據(jù),對數(shù)據(jù)庫實施 update 操作
具體實現(xiàn)代碼如下:
- TUser user = new TUser();
- user.setImage(Hibernate.createBlob(new byte[1]));
- Transaction ex = session.beginTransaction();
- session.save(user);
- //強制保存這個blob
- session.flush();
- //通過刷新 user 來獲得blob游標
- session.refresh(user,LockMode.UPGRADE);
- //寫入真正的實際內(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)建的是一個空格的 String :user.setResume(Hibernate.createClob(" "));
【編輯推薦】