因爲開發的時候公司的項目,所以只能說明不能截圖了,在這裏請大家諒解。
BLOB這個字段,首先是存大數據的,本人倒是不建議在數據庫中存入那麼大的數據,影響服務器性能。而且如果表沒有采用分佈存儲,沒有考慮維護,一段時間就會很大,本人一點見解,表大小超過1G的容量時候,明顯影響數據讀取速度。這個扯的有點遠了,迴歸正題。
我瞭解的系統是用HIBernate 讀取大容量的BLOB,中間採用SPRING進行管理。
在SPRING applicationContext.xml中配置
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />
並將其映射到TransactionMaanger中
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="lobHandler" ref="lobHandler"/> </bean>
在程序中 如有以下對象
public class USER{
private BLOB Info;
private String name;
//生成get和set方法
}
HIbernate 讀取BLOB字段
BLOB blob=User.getInfo();
if(blob.length>0)
{
Byte[] bytes=new Byte[blob.length-1];
bytes=blob.getBytes();//裝到bytes數組裏;
//轉換成String
string str=new String(bytes,"GBK");
}
這樣就轉換過來了。
我之所以要寫 HIBernate 的讀取 是要跟Ibatis做對照
因爲在iBatis 中查詢返回List 當然BLOB字段也是被查詢出來了。
我調試了以下發現 List中裝的就是HashMap 一個是BLOB字段,一個當然是值,仔細在看發現就是bytes格式看來不用轉了。直接就可以用
//這裏是僞代碼只表達大意
Iterator it=list.iterator();
while(it.hashnext())
{
HashMap hm=(HashMap)it.next();
Bytes[] bytes=hm.get("info").getValue();//這樣就把BLOB數據裝進去了。
}