保存文件等二进制大对象到oracle数据库中的解决方法
来源:互联网 发布:多益网络总裁 编辑:程序博客网 时间:2024/05/29 13:18
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();
}
}
- 保存文件等二进制大对象到oracle数据库中的解决方法
- java 大文件以二进制保存到数据库
- java 大文件以二进制保存到数据库
- 保存二进制 文件到数据库c#
- 用Adodb.Stream将以二进制方式保存在数据库中的文件保存到硬盘
- AO中保存二进制大对象(BLOB)-----将图层保存到数据库中
- java将文件保存为二进制流到oracle表中的blob字段
- oracle数据库中的大对象
- 保存大文件到数据库中
- 文件以二进制流保存到数据库及下载
- Javaweb中的文件批量上传,并将文件路径等信息保存到数据库中
- oracle从入门到精通 之 七.ORACLE数据库中的序列,同义词,索引等对象
- java上传大对象到oracle数据库
- java 保存对象到文件,读取文件中的对象
- java 保存对象到文件,读取文件中的对象
- java 保存对象到文件,读取文件中的对象
- 将指定图片转成二进制数组,以及将二进制数组保存到数据库中的方法
- 修改FCKEditor实现将图片、文件等保存到数据库
- WinRunner测试设计(5)
- 在QTP中如何管理对象库(转)
- FCKEDITOR的配置
- 来自另一篇Java Annotation文章
- VB中删除、替换或者插入内容到文本中某一行及解析文本行列的处理实例(转)
- 保存文件等二进制大对象到oracle数据库中的解决方法
- zz脑力风暴
- matlab for linux 快捷键设置
- 月入8千的出租司机给我上上的一堂MBA
- 关于"RPC server is unavailable"的解决方案
- 浅谈C++类(6)--复制构造函数
- ...
- J2EE开发常用
- Java中容易出现乱码的地方以及解决方法