博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis oracle BLOB类型字段保存与读取
阅读量:6223 次
发布时间:2019-06-21

本文共 6120 字,大约阅读时间需要 20 分钟。

一、BLOB字段

  BLOB是指二进制大对象也就是英文Binary Large Object的所写,而CLOB是指大字符对象也就是英文Character Large Object的所写。其中BLOB是用来存储大量二进制数据的;CLOB用来存储大量文本数据。BLOB通常用来保存图片、文件等二进制类型的数据。

二、使用mybatis操作blob

  1、表结构如下:

create table BLOB_FIELD(   ID                   VARCHAR2(64 BYTE)    not null,   TAB_NAME             VARCHAR2(64 BYTE)    not null,   TAB_PKID_VALUE       VARCHAR2(64 BYTE)    not null,   CLOB_COL_NAME        VARCHAR2(64 BYTE)    not null,   CLOB_COL_VALUE       CLOB,   constraint PK_BLOB_FIELD primary key (ID));

  2、实体代码如下:

1 package com.test.entity; 2  3 import java.sql.Clob;  4  5 /** 6  * 大字段  7  */ 8 public class BlobField {  9 10     private String tabName;// 表名11     private String tabPkidValue;// 主键值12     private String blobColName;// 列名13     private byte[] blobColValue;// 列值 clob类型14 15     public String getTabName() {16         return tabName;17     }18 19     public void setTabName(String tabName) {20         this.tabName = tabName;21     }22 23     public String getTabPkidValue() {24         return tabPkidValue;25     }26 27     public void setTabPkidValue(String tabPkidValue) {28         this.tabPkidValue = tabPkidValue;29     }30 31     public String getBlobColName() {32         return blobColName;33     }34 35     public void setBlobColName(String blobColName) {36         this.blobColName = blobColName;37     }38 39     public byte[] getBlobColValue() {40         return blobColValue;41     }42 43     public void setBlobColValue(byte[] blobColValue) {44         this.blobColValue = blobColValue;45     }46 47 }

  3、mybatis sql代码如下:

1 
2 3
4 5
6 a.ID AS id, 7 a.TAB_NAME AS tabName, 8 a.TAB_PKID_VALUE AS tabPkidValue, 9 a.BLOB_COL_NAME AS blobColName,10 a.BLOB_COL_VALUE AS blobColValue11
12 13
14
15 16
23 24
30 31
32 INSERT INTO BLOB_FIELD(33 ID ,34 TAB_NAME ,35 TAB_PKID_VALUE ,36 BLOB_COL_NAME ,37 BLOB_COL_VALUE38 ) VALUES (39 #{id},40 #{tabName},41 #{tabPkidValue},42 #{blobColName},43 #{blobColValue,jdbcType=BLOB}44 )45
46 47
48 UPDATE BLOB_FIELD SET49 TAB_NAME = #{tabName},50 TAB_PKID_VALUE = #{tabPkidValue},51 BLOB_COL_NAME = #{blobColName},52 BLOB_COL_VALUE = #{blobColValue}53 WHERE ID = #{id}54
55
56 DELETE FROM BLOB_FIELD 57 WHERE ID = #{id}58
59 60

  3、controller代码如下:

  a、保存BLOB字段代码

1 /** 2      * 附件上传 3      *  4      * @param testId 5      *            主表Id 6      * @param request 7      * @return 8      * @throws UnsupportedEncodingException 9      */10     @RequiresPermissions("exc:exceptioninfo:feedback")11     @RequestMapping(value = "attachment", method = RequestMethod.POST)12     @ResponseBody13     public Map
uploadAttachment(@RequestParam(value = "testId", required = true) String testId, 14 15 HttpServletRequest request)16 throws UnsupportedEncodingException {17 Map
result = new HashMap
();18 19 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;20 // 获得文件21 MultipartFile multipartFile = multipartRequest.getFile("Filedata");// 与前端设置的fileDataName属性值一致22 String filename = multipartFile.getOriginalFilename();// 文件名称23 InputStream is = null;24 try {25 //读取文件流26 is = multipartFile.getInputStream();27 byte[] bytes = FileCopyUtils.copyToByteArray(is);28 BlobField blobField = new BlobField();29 blobField.setTabName("testL");30 blobField.setTabPkidValue(testId);31 blobField.setBlobColName("attachment");32 blobField.setBlobColValue(bytes);33 //保存blob字段34 this.testService.save(blobField, testId, filename);35 result.put("flag", true);36 result.put("attachmentId", blobField.getId());37 result.put("attachmentName", filename);38 } catch (IOException e) {39 e.printStackTrace();40 result.put("flag", false);41 } finally {42 IOUtils.closeQuietly(is);43 }44 return result;45 }

  b、读取BLOB字段

1 /** 2      * 下载附件 3      *  4      * @param attachmentId 5      * @return 6      */ 7     @RequiresPermissions("exc:exceptioninfo:view") 8     @RequestMapping(value = "download", method = RequestMethod.GET) 9     public void download(@RequestParam(value = "attachmentId", required = true) String attachmentId,10             @RequestParam(value = "attachmentName", required = true) String attachmentName, HttpServletRequest 11 12 request, HttpServletResponse response) {13         ServletOutputStream out = null;14         try {15             response.reset();16             String userAgent = request.getHeader("User-Agent");17             byte[] bytes = userAgent.contains("MSIE") ? attachmentName.getBytes() : attachmentName.getBytes("UTF-18 19 8"); // fileName.getBytes("UTF-8")处理safari的乱码问题20             String fileName = new String(bytes, "ISO-8859-1");21             // 设置输出的格式22             response.setContentType("multipart/form-data");23             response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(attachmentName, 24 25 "UTF-8"));26             BlobField blobField = this.blobFieldService.get(attachmentId);27             //获取blob字段28             byte[] contents = blobField.getBlobColValue();29             out = response.getOutputStream();30             //写到输出流31             out.write(contents);32             out.flush();33         } catch (IOException e) {34             e.printStackTrace();35         }36     }

  本例子将文件上传并保存到BLOB类型字段字段,下载的时候读取BLOB字段,并写入成输出流。

转载地址:http://avrja.baihongyu.com/

你可能感兴趣的文章
oracle 锁的介绍 (转)
查看>>
简单实现C#生成XML文件代码
查看>>
54、用尽量多的方法实现单例模式
查看>>
Django之jsonp跨域请求原理
查看>>
原生js
查看>>
用链表实现堆栈结构。
查看>>
[Linux学习]rmdir命令
查看>>
用js实现冒泡排序和求水仙花数
查看>>
[C++基础]036_一段关于指针的误操作代码
查看>>
solr服务器搭建
查看>>
IPayablebillItf
查看>>
《别做正常的傻瓜》的一些读书心得
查看>>
python_异常处理_断言
查看>>
.Net转Java自学之路—Mybatis框架篇二(SqlSession、原始开发、代理开发)
查看>>
JavaScript——slice和splice的区别
查看>>
url查重--bloom过滤器
查看>>
django
查看>>
vs plug
查看>>
Jquery的冒泡事件的阻止与允许
查看>>
实践是检验真理的唯一标准 - 脱壳篇02
查看>>