欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

BLOB字段数据读取

程序员文章站 2024-02-23 14:11:52
...

 因为开发的时候公司的项目,所以只能说明不能截图了,在这里请大家谅解。

     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数据装进去了。


}