hibernate 读取Blob字段 OutOfMemoryError

数据库:mysql server 6.0
driver:mysql-connect-java-5.0.4-bin.jar
Hibernate:3.2

读mysql user表中的一个BLOB字段,出现这种错误:java.lang.OutOfMemoryError: Java heap space

下面是我的代码:

User类:

[code]
package org.redleaf;

import java.sql.Blob;

public class User {

private int id ;
private String name ;
private Blob details ;

public Blob getDetails() {
return details;
}
public void setDetails(Blob details) {
this.details = details;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}


}

[/code]

user.hbm.xml 文件:

[code]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="org.redleaf.User" table="user">
<id name="id" column="id">
<generator class="native" />
</id>
<property name="name" column="name" />
<property name="details" column="details" type="java.sql.Blob" lazy="true"/>
</class>
</hibernate-mapping>[/code]


下载的servlet程序:

[code]package org.redleaf.util;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class download extends HttpServlet {

public download() {
super();
}

public void destroy() {
super.destroy();
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

doPost(request,response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

org.hibernate.cfg.Configuration conf = new org.hibernate.cfg.Configuration().configure("/workspace.cfg.xml");
org.hibernate.SessionFactory sessionFactory = conf.buildSessionFactory();
org.hibernate.Session se = sessionFactory.openSession();
org.redleaf.User user = (org.redleaf.User)se.get(org.redleaf.User.class, new Integer(4));//运行到这里就出错了,好像details字段并没有延迟加载

String display_name = "test文件.chm"; //该文件存在数据库的details字段,有33MB

response.setHeader("Content-disposition","attachment;filename=" + new String(display_name.getBytes("gbk"),"iso8859-1"));

BufferedInputStream input = null;
BufferedOutputStream output = null;
try{

java.sql.Blob details = user.getDetails();


java.io.InputStream in = details.getBinaryStream();

input = new BufferedInputStream(in);
output = new BufferedOutputStream(response.getOutputStream());
int len = 0;
byte [] b = new byte[10240];
while((len = input.read(b)) != -1){
output.write(b,0,len);
}


}catch(Exception e){
e.printStackTrace();
}finally{
if(output!=null) output.close();
if(input!=null) input.close();
}


/*
OutputStream out = response.getOutputStream();
try{

out.write(user.getDetails().getBytes(1,(int) user.getDetails().length()));


}catch(Exception e){
e.printStackTrace();
}finally{
out.flush();
out.close();
}
*/
}

public void init() throws ServletException {

}

}[/code]

大家帮我看看,有什么办法让这个details字段从数据库里读出来不出java.lang.OutOfMemoryError: Java heap space这个错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值