文档章节

ResultSet接口实现字段blob类型的附件流存储下载操作

 项忠强
发布于 2016/12/12 11:02
字数 303
阅读 3
收藏 0
点赞 0
评论 0

1、构建完整的sql语句:

    StringBuffer sql = new StringBuffer();
    sql.append(" SELECT B.FILE_NAME,B.DATA ");//其中字段DATA是blob类型
    sql.append("   FROM YLS_FILE_UP FU ");
    sql.append("  INNER JOIN SM_FUNCREGISTER SF ON FU.PK_FUNC = SF.CFUNID ");
    sql.append("  INNER JOIN EPRK_PUB_BLOB B ON FU.PK_PUB_BILL = B.PK_PUB_BLOB ");
    sql.append("  WHERE SF.FUN_CODE = ?  ORDER BY FU.TS ASC ");
    String sqlStr=sql.toString().replaceAll("\\?", "'"+funCode+"'");

2、获取blog字段的附件

public Map downFile(JdbcTemplate jdbctemplate,final String sql){
	return (Map)jdbctemplate.execute(new ConnectionCallback() {
		@Override
		public Object doInConnection(Connection con) throws SQLException,DataAccessException {
			Map map=new HashMap();
			ResultSet rs=con.createStatement().executeQuery(sql);
			Blob fileClassifyFile=null;
			String fileName=null;
			if(rs.next()){
				fileName=rs.getString(1);
				fileClassifyFile=rs.getBlob(2);//获取blog字段
			}
			InputStream ins=null;
			byte[] b=null;
			try{
				b=new byte[(int)fileClassifyFile.length()];
				ins=fileClassifyFile.getBinaryStream();
				ins.read(b);//写入byte字节数组
			}catch(Exception e){
				e.printStackTrace();
			}finally{
				if(ins!=null){
					try {
						ins.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				if(con!=null){
					con.close();
				}
			}
			map.put("fileName", fileName);
			map.put("bytes",b);
			return map;//最后返回带有byte[]字节数组的map对象
		    }
		});
	}

3、将字节数组写入文件中

        Map map=downFile(getJdbcTemplate(),sqlStr);
        byte[] buffer=(byte[])map.get("bytes"); //获取字节流
        File file=new File(dir.getPath()+"/"+fileName);
        ByteArrayInputStream ins=new ByteArrayInputStream(buffer);
        FileOutputStream out=null;
        try{
            out=new FileOutputStream(file);
            int i=0;
            while((i=ins.read())!=-1){
                out.write(i);
            }
            ComponentUtil.show_MSG_DLG("成功下载模板文件!");
        }catch(IOException ioE){
            ComponentUtil.show_MSG_DLG("模板文件下载失败!");
            ioE.printStackTrace();
        }finally{
            if(out!=null){
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

至此,完成表字段blob类型的附件流下载

© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 3
码字总数 633
作品 0
闸北
后端工程师
Java程序中使用oracle数据库LOB字段的总结

LOB中我们用的比较多的主要有两种CLOB和BLOB,我们对两种类型分别讨论 1.CLOB是字符型LOB,主要存储文本信息,最长为4G.,在J2EE程序中,比如网页的textarea中的字符信息比较长,Varchar2字段类型不...

Adairs ⋅ 2016/03/10 ⋅ 0

Oracle中Blob和Clob的作用

  Blob是指二进制大对象也就是英文Binary Large Object的所写,而Clob是指大字符对象也就是英文Character Large Object的所写。由此可见这辆个类型都是用来存储大量数据而设计的,其中BLO...

underA ⋅ 2013/03/15 ⋅ 0

JDBC连接效率问题

JDBC部分 终端进入mysql: mysql -u root回车 终端进入oracle: telnet 192.168.0.23 然后sqlplus openlab/open123 MySQL常用命令: show databases; use tableName; show tables; 一、概述J......

长征2号 ⋅ 2017/11/08 ⋅ 0

java Oracle中的大字段存二进制/大文本

数据库中提供了两种字段类型 Blob 和 Clob 用于存储大型字符串或二进制数据 Blob 采用单字节存储,适合保存二进制数据,如图片文件。 Clob 采用多字节存储,适合保存大型文本数据。 Oracle中...

李茂冉 ⋅ 2016/05/17 ⋅ 0

Java 包中重要接口介绍

--applet:applet是一种Java程序。它一般运行在支持Java的Web浏览器内。因为它有完整的Java API支持,所以applet是一个全功能的Java应用程序。 --awt:用于创建用户界面和绘制图形图像的所有分类...

GoogleFan ⋅ 2016/07/20 ⋅ 0

【Azure Services Platform Step by Step-第10篇】使用Blob Storage搭建简单网络硬盘

我们已经介绍过Blob Storage的用途及其在Windows Azure Storage的地位。现在我们示范一下,如何用最简单的代码,将Blob Storage带入我们的生活。 最终效果如下图:(已部署到云端的Demo http...

技术小阿哥 ⋅ 2017/11/27 ⋅ 0

Oracle中JDBC对BLOB和CLOB读取的专用处理和通用处理

设有表: create table blobimg (id int primary key, contents blob); 一、BLOB入库的专用访问: 1) 最常见于Oracle的JDBC示例中 一般是先通过select ... for update锁定blob列,然后写入b...

晨曦之光 ⋅ 2012/04/12 ⋅ 0

JDBC常见面试题集锦(二)

JDBC的保存点(Savepoint)是什么,如何使用? 有时候事务包含了一组语句,而我们希望回滚到这个事务的某个特定的点。JDBC的保存点可以用来生成事务的一个检查点,使得事务可以回滚到这个检查点...

LCZ777 ⋅ 2014/03/19 ⋅ 0

在oracle 数据库中使用 Blob 字段存储 一张图片并读取

进行数据库的设置 create table imagelob(tid varchar2(5) not null,t_image blob not null); create or replace directory "images" as 'f:pic'; create or replace procedure img_insert(t......

globalHawk ⋅ 2014/12/05 ⋅ 0

JDBC--BLOB

一、BLOB(二进制数据) 1. MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。 2.BLOB字段适用于存储大量的二进制数据,如图像、视频、音频,文件...

大道无名 ⋅ 2016/07/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部