1.VO,PO准备
首先在数据库中定义要保存的字段为Blob类型,同时map的对应hbm文件中对应列应该为java.sql.Blob类型,所以生成的PO对应字段也应该为java.sql.Blob,(不是oracle.sql.BLOB)。
对于前台的值对象VO中,对应字段定义为byet[],当然也可以设置为InputStream,由后台进行处理,但是不应直接设置为blob类型,因为dao在写操作时需要用数据流进行写入。
2.前台处理
首先是页面的定义
<input type=”file” name=”upFile”/>
或<html:file property=”upFile”>
然后是Action 对应Form的定义,应该存在一个FormFile类型的字段,以获取页面上传的文件对象,名称和页面上定义的文件控件对应,比如:upFile.
最后是Action中的实现:
首先通过form获取FormFile对象,通过FormFile对象获取对应文件的大小,和对应的输入流InputStream,利用com.westerasoft.common.util.FileUtil中的getByte方法,将InputStream转为byte[],设置在VO对象中,调用后台方法进行保存.前台处理完成。下面是示例代码:
FileUpForm fileform = (FileUpForm)form; // FormFile file = fileform.getFile(); // int size = file.getFileSize(); // InputStream stream = file.getInputStream(); // String fileName = file.getFileName(); // PictureFileVO vo = new PictureFileVO(); vo.setPictureName(fileName); // vo.setContent(FileUtil.getBytes(stream,size)); // SingleWellManageService.addPictureFile(vo);3.由于oracle的Blob字段的保存,比较特殊,首先必须先初始化对应的Blob字段,既第一次保存时,应该保存空的Blob对象到数据库(empty_blob()),然后再进行更新,在更新的过程中必须对当前记录进行锁定,更新时需要使用输出流的方式。对于使用Hibernate来说,比JDBC简单一些,保存时不能简单使用hibernate的save方法,那样会造成保存只能保存4K以下的文件,有的说是因为oracle9i之前的驱动问题,使用10g可解决问题,未进行尝试。下面是实现的简单示例:
dao = new SwWellPictureFileDAO();
//获取session
Session s = null;
try
{
//获取实例
s = dao.getSession();
//初始化设置空的Blob
po.setContent(BLOB.empty_lob());
//第一次保存,初始化blob
s.save(po);
s.flush();
s.refresh(po, LockMode.UPGRADE); //Blob更新之前必须锁定
//将当前PO的blob字段与OutputStream关联
weblogic.jdbc.vendor.oracle.OracleThinBlob tempBlob =
(weblogic.jdbc.vendor.oracle.OracleThinBlob)po.getContent();
OutputStream out = tempBlob.getBinaryOutputStream();
//将前台的byte[]写入流
out.write(content);
out.close();
//数据持久
s.flush();
return po.getPkPicturefile().intValue();
}
catch (Exception e)
{
throw new HibernateException("提交文件信息出错");
}
finally
{
//关闭session
if (s != null)
{
s.close();
}
}
如果你想做移动GIS并使用java+mapxTreme模式那么其中一个问题很是让人郁闷,那就是如何将Mapxrender出来的Image返回给客户端。为了这个问题我查找了很多类似的文章但最终还是没有成功。后来一个脑海中一闪而过的念头一下子让我激动起来,原来J2ME接收数据的时候就是将InputStream转换成Byte然后再进行处理的,既然J2me能够这么做那么我想java也应该没问题了所以便有了一下成果。你可以将mapxtremeRender出来的图片现保存到硬盘然后通过
InputStream iStrm = new FileInputStream(curpath+"\\h.gif");
方法将其转化为InputStream然后再转化为Byte下面是具体代码希望对大家有帮助,如果对你有帮助请回个贴顶一下哦。
public byte[] InputStreamToByte(InputStream iStrm) throws IOException {
ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
int ch;
while ((ch = iStrm.read()) != -1)
{
bytestream.write(ch);
}
byte imgdata[]=bytestream.toByteArray();
bytestream.close();
return imgdata;
}
分享到:
相关推荐
综上所述,将图片以二进制格式存储在Oracle数据库中并从数据库中取出显示到页面,涉及到文件读取、二进制数据处理、数据库操作以及HTTP响应的设置。通过理解这些概念和技巧,开发者能够更好地管理和展示数据库中的非...
4. **创建数据表**:在Oracle数据库中创建一个专门用来存储图片二进制流的表,通常包含一个字段用于存储二进制数据,比如`BLOB`类型。 5. **持久化到数据库**:使用Hibernate或JDBC API将二进制流写入数据库。在...
在实际操作中,可以通过Hibernate实现Oracle数据库中BLOB数据的存储和删除操作,然后利用Struts2框架展示这些BLOB数据。这样的结合,不仅可以提高开发效率,还能保证应用的性能和稳定性。 ### 实际操作步骤 在实际...
- **文件上传**:用户通过表单提交包含文件的数据到服务器,Struts2框架接收到请求后,将文件保存到服务器的特定目录,并将相关信息(如文件名、大小等)存储到数据库中。 - **文件下载**:用户请求下载时,服务器...
在Java开发中,有时我们需要存储二进制大数据,如图片、视频或文档,这时Oracle数据库中的Blob类型就显得尤为重要。Blob(Binary Large Object)是Oracle用来存储大对象数据的类型,它可以高效地处理大量的二进制...
在Oracle数据库中,BLOB类型的字段具有特殊的处理方式,尤其在使用JDBC(Java Database Connectivity)和Hibernate框架时,需要特别注意其写入过程。以下是对“JDBC+Hibernate将Blob数据写入Oracle”这一主题的深入...
综上所述,这个实例展示了如何在Oracle数据库中使用Hibernate处理Blob数据,结合Uploadify实现文件上传。这种解决方案不仅适用于Oracle,理论上也适用于其他支持Blob类型的数据库,如MySQL和MSSQLServer。了解这些...
在Java Web开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它极大地简化了数据库操作。当处理大数据字段,如长文本、图片或视频等时,Hibernate提供了有效的方法来存储和检索这些数据。本示例将详细...
例如,Oracle和MySQL在处理大对象时有各自的API和策略。 总结,Hibernate通过`@Lob`注解支持BLOB和CLOB的持久化,开发者需要适当地将数据转换为对应的对象类型,然后使用Hibernate的CRUD操作进行保存和检索。同时,...
这篇文档“Hibernate-Oracle-MySQL-image.rar_oracle”聚焦于使用Hibernate处理Oracle和MySQL数据库中的二进制大对象(Blob),特别关注如何存储和检索图片文件。Blob类型常用于存储大型数据,如图像、音频或视频...
Oracle数据库支持BLOB(Binary Large Object)类型,用于存储大容量的二进制数据,如图片、音频或视频文件。在Hibernate中,我们可以通过定义一个BLOB类型的字段来映射图片数据。 【三】准备环境 1. 首先,确保已...
通常,我们会选择支持二进制大对象(BLOB)的数据库,如MySQL、PostgreSQL或Oracle等,用于存储字节流数据。创建一个表,包含一个BLOB类型的字段,用于存放图片数据。然后,通过SQL语句或者ORM框架(如Hibernate或...
Hibernate通过配置文件(如hibernate.cfg.xml)与数据库建立连接,定义实体类并映射到对应的表,使得数据库操作可以通过对象的方式来实现,提高代码的可读性和可维护性。 在实际项目中,开发者需要配置Maven的pom....
它支持多种数据类型,包括关系型数据、XML、二进制大对象等,并具有高可用性、可伸缩性和安全性。Oracle数据库还提供了强大的性能优化工具和高级特性,如分区、索引、物质化视图等,以满足大规模数据存储和复杂查询...
在Oracle数据库中,我们首先需要创建一个包含图片数据的表。例如,创建名为`admin`的表,包含ID(主键)、Name(名称)和Img(图片)三列,Img列的数据类型为Blob,用于存储二进制大对象。 ```sql CREATE TABLE ...
在J2EE开发中,处理大数据对象(如大文本或二进制数据)时,Oracle数据库的CLOB字段常被用来存储超过4000字节的信息。Spring和Hibernate框架结合使用可以有效地进行CLOB字段的操作。以下是实现这一功能的关键步骤和...
在Oracle数据库中,Hibernate提供了与这些数据类型的交互方式。本篇将详细介绍在Hibernate中如何处理Clob和Blob字段,以及使用特定Oracle JDBC驱动程序的优势。 首先,Hibernate通过`org.hibernate.type`包中的`...
在Java编程中,有时我们需要将图像数据存储到数据库中,然后能够从数据库中读取出来。这个过程通常涉及到Blob和Clob数据类型,它们是Java中的两种特殊对象,用于存储大对象(LOB)。Blob用于存储二进制数据,如图片...
在Java开发领域,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。当涉及到Hibernate项目时,为了使其正常运行,通常需要一系列的JAR(Java ...