关键字: 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类:
- 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;
- }
-
-
- }
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;
}
}
user.hbm.xml 文件:
- <?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>
<?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>
下载的servlet程序:
- 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));
-
- String display_name = "test文件.chm";
-
- 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();
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
-
- public void init() throws ServletException {
-
- }
-
- }
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 {
}
}
大家帮我看看,有什么办法让这个details字段从数据库里读出来不出java.lang.OutOfMemoryError: Java heap space这个错误
分享到:
相关推荐
本篇文章将深入探讨如何使用Hibernate读取数据库中的Blob字段,以及涉及到的相关知识点。 首先,我们需要理解Blob类型在数据库中的含义。Blob是Binary Large Object的缩写,它是一种可以存储大量二进制数据的数据...
### Oracle中BLOB字段的读取与操作 #### 一、引言 在数据库系统中,BLOB(Binary Large Object)是一种用于存储大量二进制数据的数据类型,例如图像、音频或视频文件等。在Oracle数据库中,BLOB类型特别适用于处理...
本篇将详细介绍如何使用JDBC(Java Database Connectivity)与Hibernate框架来操作Oracle数据库中的BLOB字段。 首先,Oracle数据库的BLOB字段提供了对大对象的高效存储,它的性能优于LONG字段,尤其适合存储大容量...
delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段...
### Hibernate 对 Blob 类型字段进行数据添加 #### 知识点概述 在处理数据库操作时,经常需要存储二进制大对象(Binary Large Object,简称 BLOB),例如图像、视频等非文本数据。BLOB 类型是数据库系统中用于存储...
分块读取Blob字段是优化大量数据传输的有效策略,避免一次性加载大文件导致内存压力过大。 首先,`createTable.sql` 文件可能包含了创建包含Blob字段的Oracle表的SQL语句。通常,这样的语句会类似于: ```sql ...
可以从数据库中读取blob字段并插入到另一个表中,已经测试通过
读取Blob字段时,可以创建一个`OracleBinary`对象,然后使用`GetValue`方法获取Blob数据。写入Blob字段时,先创建`OracleParameter`对象,将其Direction设置为` ParameterDirection.Input `,OracleDbType设置为`...
kettle通过java代码将数据库blob 字段抽取到本地文件
本文将详细介绍如何在Java中有效地读取`BLOB`类型的大字段,帮助解决程序员们常遇到的难题。 #### BLOB类型的概述 `BLOB`类型是关系型数据库中用于存储大量二进制数据的一种数据类型。它适用于存储诸如图片、声音...
在Java的持久化框架Hibernate中,处理大数据类型如Oracle数据库中的Clob(Character Large Object)和Blob(Binary Large Object)字段是一项重要的任务。Clob通常用于存储大量的文本数据,而Blob则适用于二进制...
在数据库管理与应用开发中,处理BLOB(Binary Large Object)类型字段是一项常见的需求,尤其是在存储大量二进制数据如图像、音频或视频文件时。本文将深入探讨如何判断一个BLOB字段是否为空,这是一个在数据库操作...
### Java中读取Oracle数据库BLOB字段存储的图片方法详解 #### 一、背景与目的 在实际的应用开发过程中,经常会有将图片等二进制数据存入数据库的需求。Oracle数据库支持通过BLOB(Binary Large Object)类型来存储...
Java对Oracle数据库中BLOB字段的处理涉及多个层面,包括读取、写入、更新以及跨数据库操作等。 ### Java处理Oracle BLOB字段的基本方法 #### 1. 读取BLOB字段 在Java中,读取Oracle数据库中的BLOB字段通常通过`...
oracle中对blob字段的处理方法,包括增加,删除,修改,更新等操作。
3. **读取BLOB字段** - 对于DBExpress,可以使用TOracleQuery组件的SQL属性执行查询,然后在OnBeforeOpen事件中处理BLOB字段,通过TOracleBlobField对象访问BLOB数据。 - 对于ADO,使用TADODBCommand对象的Execute...
本文将详细介绍如何使用Hibernate和JDBC读取和存储Oracle数据库中的Blob对象。 ### 1. Hibernate Blob操作 在Hibernate中,Blob对象通常与Java的`java.sql.Blob`接口相对应。在实体类中,你可以定义一个Blob类型的...
本文介绍了一种基于JSP访问ORACLE数据库BLOB字段并显示图形的解决方案,展示了JSP技术、ORACLE数据库BLOB字段、坐标点的存储和读取、图形的显示、排样数据表设计、Samplegraph.jsp的功能、JAVA类的应用等知识点。
C# 中的 BLOB 读取操作 C# 中的 BLOB(Binary Large OBject)读取操作是指从数据库中读取二进制数据的过程。BLOB 是一种二进制数据类型,用于存储大规模的二进制数据,如图片、音频、视频等。在 C# 中,我们可以...