因为开发的时候公司的项目,所以只能说明不能截图了,在这里请大家谅解。
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数据装进去了。
}