ResultSet接口实现字段blob类型的附件流存储下载操作
ResultSet接口实现字段blob类型的附件流存储下载操作
项忠强 发表于11个月前
ResultSet接口实现字段blob类型的附件流存储下载操作
  • 发表于 11个月前
  • 阅读 1
  • 收藏 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类型的附件流下载

标签: Java EE 附件下载
共有 人打赏支持
粉丝 2
博文 3
码字总数 633
×
项忠强
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: