文档章节

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
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
170
0

没有更多内容

加载失败,请刷新页面

加载更多

RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
12
0

中国龙-扬科
昨天
2
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
9
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
8
0
在PC上测试移动端网站和模拟手机浏览器的5大方法

总结很全面,保存下来以备不时之需。原文地址:https://www.cnblogs.com/coolfeng/p/4708942.html

kitty1116
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部