欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入淺析mybatis oracle BLOB類型字段保存與讀取

 更新時間:2015年10月16日 15:23:39   作者:煙火_  
本文給大家淺析mybatis oracle blob類型字段的保存與讀取,blob字段是指二進(jìn)制大對象,用來存儲大量文本數(shù)據(jù)。感興趣的朋友一起學(xué)習(xí)吧

一、BLOB字段

  BLOB是指二進(jìn)制大對象也就是英文Binary Large Object的所寫,而CLOB是指大字符對象也就是英文Character Large Object的所寫。其中BLOB是用來存儲大量二進(jìn)制數(shù)據(jù)的;CLOB用來存儲大量文本數(shù)據(jù)。BLOB通常用來保存圖片、文件等二進(jìn)制類型的數(shù)據(jù)。

二、使用mybatis操作blob

  1、表結(jié)構(gòu)如下:

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、實體代碼如下:

 package com.test.entity;
 import java.sql.Clob; 
 /**
  * 大字段 
  */
 public class BlobField { 
   private String tabName;// 表名
   private String tabPkidValue;// 主鍵值
   private String blobColName;// 列名
   private byte[] blobColValue;// 列值 clob類型
   public String getTabName() {
     return tabName;
   }
   public void setTabName(String tabName) {
     this.tabName = tabName;
   }
   public String getTabPkidValue() {
     return tabPkidValue;
   }
   public void setTabPkidValue(String tabPkidValue) {
     this.tabPkidValue = tabPkidValue;
   }
   public String getBlobColName() {
     return blobColName;
   }
   public void setBlobColName(String blobColName) {
     this.blobColName = blobColName;
   }
   public byte[] getBlobColValue() {
     return blobColValue;
   }
   public void setBlobColValue(byte[] blobColValue) {
     this.blobColValue = blobColValue;
   }
 }

  3、mybatis sql代碼如下:

 <?xml version="." encoding="UTF-" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper .//EN" "http://mybatis.org/dtd/mybatis--mapper.dtd">
 <mapper namespace="com.test.dao.BlobFieldDao">
   <sql id="blobFieldColumns">
     a.ID AS id,
     a.TAB_NAME AS tabName,
     a.TAB_PKID_VALUE AS tabPkidValue,
     a.BLOB_COL_NAME AS blobColName,
     a.BLOB_COL_VALUE AS blobColValue
   </sql>
   <sql id="blobFieldJoins">
   </sql>
   <select id="get" resultType="blobField">
     SELECT
     <include refid="blobFieldColumns" />
     FROM BLOB_FIELD a
     <include refid="blobFieldJoins" />
     WHERE a.ID = #{id}
   </select>
   <select id="findList" resultType="blobField">
     SELECT
     <include refid="blobFieldColumns" />
     FROM BLOB_FIELD a
     <include refid="blobFieldJoins" />
   </select> 
   <insert id="insert">
     INSERT INTO BLOB_FIELD(
     ID ,
     TAB_NAME ,
     TAB_PKID_VALUE ,
     BLOB_COL_NAME ,
     BLOB_COL_VALUE
     ) VALUES (
     #{id},
     #{tabName},
     #{tabPkidValue},
     #{blobColName},
     #{blobColValue,jdbcType=BLOB}
     )
   </insert>
   <update id="update">
     UPDATE BLOB_FIELD SET
     TAB_NAME = #{tabName},
     TAB_PKID_VALUE = #{tabPkidValue},
     BLOB_COL_NAME = #{blobColName},
     BLOB_COL_VALUE = #{blobColValue}
     WHERE ID = #{id}
   </update>
   <delete id="delete">
     DELETE FROM BLOB_FIELD 
     WHERE ID = #{id}
   </delete>
 </mapper>

  3、controller代碼如下:

  a、保存BLOB字段代碼

/**
    * 附件上傳
    * 
    * @param testId
    *      主表Id
    * @param request
    * @return
    * @throws UnsupportedEncodingException
    */
   @RequiresPermissions("exc:exceptioninfo:feedback")
   @RequestMapping(value = "attachment", method = RequestMethod.POST)
   @ResponseBody
   public Map<String, Object> uploadAttachment(@RequestParam(value = "testId", required = true) String testId, 
 
 HttpServletRequest request)
       throws UnsupportedEncodingException {
     Map<String, Object> result = new HashMap<String, Object>();
 
     MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
     // 獲得文件
     MultipartFile multipartFile = multipartRequest.getFile("Filedata");// 與前端設(shè)置的fileDataName屬性值一致
     String filename = multipartFile.getOriginalFilename();// 文件名稱
     InputStream is = null;
     try {
       //讀取文件流
       is = multipartFile.getInputStream();
       byte[] bytes = FileCopyUtils.copyToByteArray(is);
       BlobField blobField = new BlobField();
       blobField.setTabName("testL");
       blobField.setTabPkidValue(testId);
       blobField.setBlobColName("attachment");
       blobField.setBlobColValue(bytes);
       //保存blob字段
       this.testService.save(blobField, testId, filename);
       result.put("flag", true);
       result.put("attachmentId", blobField.getId());
       result.put("attachmentName", filename);
     } catch (IOException e) {
       e.printStackTrace();
       result.put("flag", false);
     } finally {
       IOUtils.closeQuietly(is);
     }
     return result;
   }

  b、讀取BLOB字段

 /**
    * 下載附件
    * 
    * @param attachmentId
    * @return
    */
   @RequiresPermissions("exc:exceptioninfo:view")
   @RequestMapping(value = "download", method = RequestMethod.GET)
   public void download(@RequestParam(value = "attachmentId", required = true) String attachmentId,
       @RequestParam(value = "attachmentName", required = true) String attachmentName, HttpServletRequest 
 request, HttpServletResponse response) {
     ServletOutputStream out = null;
     try {
       response.reset();
       String userAgent = request.getHeader("User-Agent");
       byte[] bytes = userAgent.contains("MSIE") ? attachmentName.getBytes() : attachmentName.getBytes("UTF-
 "); // fileName.getBytes("UTF-")處理safari的亂碼問題
       String fileName = new String(bytes, "ISO--");
       // 設(shè)置輸出的格式
       response.setContentType("multipart/form-data");
       response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(attachmentName, 
 "UTF-"));
       BlobField blobField = this.blobFieldService.get(attachmentId);
       //獲取blob字段
       byte[] contents = blobField.getBlobColValue();
       out = response.getOutputStream();
       //寫到輸出流
       out.write(contents);
       out.flush();
     } catch (IOException e) {
       e.printStackTrace();
     }
   }        

  本例子將文件上傳并保存到BLOB類型字段字段,下載的時候讀取BLOB字段,并寫入成輸出流。

以上就是本文的全部敘述,希望對大家有所幫助。

相關(guān)文章

  • 通過Navicat連接Oracle數(shù)據(jù)庫的詳細(xì)步驟

    通過Navicat連接Oracle數(shù)據(jù)庫的詳細(xì)步驟

    本文介紹如何通過Navicat 連接Oracle數(shù)據(jù)庫,以往總是使用Oracle客戶端來連接Oracle數(shù)據(jù)庫,但是Oracle客戶端一般有幾百M的大小,而且安裝繁瑣配置麻煩,如果可以通過Navicat直接連接Oracle則會非常輕松方便,需要的朋友可以參考下
    2023-10-10
  • Win7 64位下PowerDesigner連接64位Oracle11g數(shù)據(jù)庫

    Win7 64位下PowerDesigner連接64位Oracle11g數(shù)據(jù)庫

    這篇文章主要為大家詳細(xì)介紹了Win7 64位下PowerDesigner連接64位Oracle11g數(shù)據(jù)庫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Oracle中的定時任務(wù)實例教程

    Oracle中的定時任務(wù)實例教程

    定時任務(wù)相信大家都不陌生,下面這篇文章主要給大家介紹了關(guān)于Oracle中定時任務(wù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-04-04
  • Oracle數(shù)據(jù)庫之PL/SQL使用流程控制語句

    Oracle數(shù)據(jù)庫之PL/SQL使用流程控制語句

    這篇文章介紹了Oracle數(shù)據(jù)庫之PL/SQL使用流程控制語句的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • Oracle知識整理筆記

    Oracle知識整理筆記

    這是一篇Oracle知識整理筆記,包括SQL Server和Oracle的比較、Oracle中基本的概念和關(guān)系、管理工具pl/sql Developer和如何分配權(quán)限和角色,需要的朋友可以參考下
    2015-09-09
  • oracle分組group by使用方式

    oracle分組group by使用方式

    這篇文章主要介紹了oracle分組group by使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Oracle9i取得建表和索引的DDL語句

    Oracle9i取得建表和索引的DDL語句

    Oracle9i取得建表和索引的DDL語句...
    2007-03-03
  • win10下oracle 11g安裝圖文教程

    win10下oracle 11g安裝圖文教程

    這篇文章主要為大家詳細(xì)介紹了win10下oracle11g安裝圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • WMware redhat 5 oracle 11g 安裝方法

    WMware redhat 5 oracle 11g 安裝方法

    本文將詳細(xì)介紹WMware中redhat 5 安裝oracle 11g方法,需要的朋友可以參考下
    2012-12-12
  • Oracle SQL Developer腳本輸出中文顯示亂碼的解決方法

    Oracle SQL Developer腳本輸出中文顯示亂碼的解決方法

    我們在測試Oracle Select AI(自然語言查詢數(shù)據(jù)庫)時,發(fā)現(xiàn)Run Statement中文顯示正常,而Run Script中文顯示亂碼,所以本文給大家介紹了Oracle SQL Developer腳本輸出中文顯示亂碼的解決方法,需要的朋友可以參考下
    2024-05-05

最新評論