文档章节

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

 项忠强
发布于 2016/12/12 11:02
字数 303
阅读 5
收藏 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
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
0
java Oracle中的大字段存二进制/大文本

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

李茂冉
2016/05/17
80
0
Java 包中重要接口介绍

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

GoogleFan
2016/07/20
21
0
【Azure Services Platform Step by Step-第10篇】使用Blob Storage搭建简单网络硬盘

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

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

没有更多内容

加载失败,请刷新页面

加载更多

ViewPager系列之软件主页面切换制作

效果图:ViewPager制作的页面能左右滑动,而Fragment制作的页面却不能左右滑动。 代码: <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.......

鱼想吃肉
26分钟前
2
0
大话后端开发的奇淫技巧大集合

Hi,大家好,很荣幸有这个机会可以通过写博文的方式,把这些年在后端开发过程中总结沉淀下来的经验和设计思路分享出来 模块化设计 根据业务场景,将业务抽离成独立模块,对外通过接口提供服务...

James-
26分钟前
1
0
函数

1、函数的定义:从function关键字开始,后面跟随{ (1)函数名字 (2)圆括号 (3)花括号 } function arr() {}

墨冥
27分钟前
1
0
ZABBIX 3.4 (一) 监测Nginx状态及脚本

ZABBIX 3.4 (一) 监测Nginx状态及脚本 2018年08月31日 16:56:48 YoFog 阅读数:106 标签: zabbix agentzabbix nginxnginx_status监控nginxzabbix脚本更多 个人分类: 运维 版权声明:本文...

linjin200
28分钟前
2
0
Spring 之 IOC 初始化总结

IOC 容器的初始化过程分为三步骤: Resource 定位 BeanDefinition 的载入和解析 BeanDefinition 注册 Resource 定位。我们一般用外部资源来描述 Bean 对象,所以在初始化 IOC 容器的第一步就...

专业搬砖工程师
31分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部