文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Confluence 6 反向跟踪

当反向跟踪(Trackback )被启用后,在任何你链接到可用启用自动发现功能的外部页面中,Confluence 将会自动发送一个方向跟踪 ping,这个 ping 能通知链接的页面有了内容改变。 Confluence 页...

honeymose
6分钟前
0
0
日期和时间API - 读《Java 8实战》

日期与时间 LocalDate 创建一个LocalDate对象并读取其值 // 根据年月日创建日期LocalDate date1 = LocalDate.of(2014, 3, 18);// 读取System.out.println(date1.getYear()); // 2014Sys...

yysue
14分钟前
0
0
8月15日任务

8月15日任务 Memcached命令行 • telnet 127.0.0.1 11211 • set key2 0 30 2 ab STORED get key2 VALUE key2 0 2 ab END 实例: [root@localhost 02]# telnet 127.0.0.1 11211-bash: te......

寰宇01
26分钟前
0
0
LNMP架构(Nginx访问日志、Nginx日志切割、静态文件不记录日志和过期时间)

Nginx访问日志 1.打开配置文件,搜索log_format vim /usr/local/nginx/conf/nginx.conf 2.访问日志常用变量含义 $remote_addr : 客户端IP(公网IP) $http_x_forwarded_for : 代理服务器的IP ...

蛋黄_Yolks
26分钟前
0
0
lombok 不用再写pojo的getset

java实体类不写get/set方法 1、下载地址https://projectlombok.org/download Myeclipse、eclipse安装lombok Lombok是一种Java实用工具,可以帮助开发人员消除Java的冗长,具体看lombok的官网...

木之下
34分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部