zoukankan      html  css  js  c++  java
  • JdbcTemplate 操作Oracle Blob

    写此文章,是因为我之前也并没有接触过,上网找了许多资料,还是有七七八八的问题,最终解决了,做个记录,免得之后忘记。

    首先,先取出Blob字段,将其保存在字节数组中,之后用HTTP协议中下载文件的格式对应,主要只要写两个:

    (1)response.setContentType("audio/wav"); 

    (2)response.setHeader("Content-disposition","attachment;filename=" +URLEncoder.encode("report.wav", "utf-8"));

    如果对Http协议不够熟悉,请查阅http://www.cnblogs.com/quanjia/archive/2010/11/01/1866753.html

    由于我做的一个播放控件,需要的是文件的路径,所以我还将其写在一个文件中,代码都很详细。

    1.DAO层

    /**
         * 获取汇报录音
         */
        @Override
        public void showReport(ComInput cip, ComOutput cop) {
            String id=cip.get("id").toString();
            sql.create();
            sql.append("    SELECT T.audio  FROM biaoming T    ");
            sql.append("     WHERE T.ID = ?    ");
            @SuppressWarnings("unchecked")
            List blobBeans= jdbcTemplate.query(sql.toString(),new Object[]{id},
                     new org.springframework.jdbc.core.RowMapper() {
                public Object mapRow(java.sql.ResultSet rs, int rowNum) throws SQLException {
                    byte[] iconByte = null;
                    java.sql.Blob blob  = rs.getBlob(1);
                    if(blob != null){
                        java.io.InputStream inStream  = blob.getBinaryStream();
                        iconByte = new byte[(int)blob.length()];
                        try {
                            inStream.read(iconByte);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }finally{
                            try {
                                inStream.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                 return iconByte;
               }
            }
    );

    Action层:

        ComOutput com = custReportService.showReport(cip);
                if(com.getRetCode() == LbscConstant.SUCCESS){
                    byte[] recByte = (byte[])com.getRetObj();
                    if(recByte != null  && recByte.length > 0){
                        response.setContentType("audio/wav");  
                        try {
                            response.setHeader("Content-disposition",
                                    "attachment;filename=" +
                                    URLEncoder.encode("report.wav", "utf-8"));
                        } catch (UnsupportedEncodingException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }try {
                            ServletOutputStream op = this.response.getOutputStream();
                            //保证文件名唯一,你可以用主键+时间啊等等方法                 
                            File file = new File("E:/JAVAspj/tomcat-7.0.69/webapps/report/test");  
                            if(!file.exists()){
                                file.mkdirs();
                              }
                            // fileName表示你创建的文件名;
                            String fileName= id+".wav";
                            File f = new File(file,fileName);
                            if(!f.exists()){
                                try {
                                    f.createNewFile();
                                } catch (IOException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                            }
                            FileOutputStream fout = new FileOutputStream(f);
                            op.write(recByte, 0, recByte.length);
                            fout.write(recByte);  
                            op.close();    
                            op = null;   
                            fout.close();
                            response.flushBuffer();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }   
                    }
                    return null;
                }

  • 相关阅读:
    求每天的收入和支出
    行列 转换 合并 分拆
    用户消费总金额 2000以下 20004000 40006000 查询连续数字,统计个数
    txt文件分割导入数据库
    字符串分割函数拆分成多行
    如何向一个自增字段插值
    sql中带in条件的查询及提高效率
    逐行计算、逐行递延、逐行更新
    SQL2005实现全文检索的步骤 停止数据库的用户连接
    查字段指定数据后一行记录
  • 原文地址:https://www.cnblogs.com/lwkblog/p/6197602.html
Copyright © 2011-2022 走看看