用java代碼如何存取數據庫的blob字段

一.業務

在業務中我們被要求將文件或圖片等轉成?byte[]?或?InputStream存到數據庫的Blob類型的字段中.

二.Blob類型介紹

在 MySQL 中,Blob 數據類型用于存儲二進制數據。MySQL 提供了四種不同的 Blob 類型:

  • TINYBLOB: 最大存儲長度為 255 個字節。
  • BLOB: 最大存儲長度為 65,535 個字節。
  • MEDIUMBLOB: 最大存儲長度為 16,777,215 個字節。
  • LONGBLOB: 最大存儲長度為 4,294,967,295 個字節。

三. Blob 對應的 Java 類型

在 Java 中讀取 MySQL Blob 類型時,通常使用?java.sql.Blob?類型。java.sql.Blob?是一個接口,它提供了一些方法來操作 Blob 數據。

根據 MySQL Blob 類型的不同,我們可以使用不同的 Java 類型來存儲 Blob 數據。

  • TINYBLOB 對應?byte[]?或?InputStream
  • BLOB 對應?byte[]?或?InputStream
  • MEDIUMBLOB 對應?byte[]?或?InputStream
  • LONGBLOB 對應?byte[]?或?InputStream

我們可以根據需要選擇合適的 Java 類型。推薦用InputStream,這樣代碼不用轉換來轉換去,比較簡單

四.上存取java代碼

1.建表

2.建實體類

@Data
public class TTT {private String id;private String name;private  String createTime;private byte[] miaoshuByte;private InputStream miaoshuInputstream;
}

?3.用個自己寫的工具類

public class FileUtil {/*** file轉byte*/public static byte[] file2byte(File file) throws IOException {FileInputStream fis = null;ByteArrayOutputStream bos = null;try {fis = new FileInputStream(file);bos = new ByteArrayOutputStream();IOUtils.copy(fis, bos);byte[] bytes = bos.toByteArray();return bytes;}finally {if (fis != null) {fis.close();}if (bos != null) {bos.close();}}}/*** byte 轉file*/public static File byte2File(byte[] buf,String fileName) throws IOException {FileOutputStream fos = null;try {fos = new FileOutputStream(fileName);fos.write(buf);File file = new File(fileName);return file;} finally {if (fos != null) {fos.close();}}}
} 

4.訪問接口

@RestController
@RequestMapping("order/")
@Slf4j
public class SendHttpWController {@Autowiredprivate UtimeeMapper utimeeMapper;@GetMapping("/aa")public String queryById( Integer id) throws IOException {TTT ttt = new TTT();ttt.setId("30");ttt.setName("張三");File file = new File("F:\\Desktop\\aa.docx");byte[] bytes = FileUtil.file2byte(file);ttt.setMiaoshuByte(bytes);FileInputStream fileInputStream = new FileInputStream(file);ttt.setMiaoshuInputstream(fileInputStream);utimeeMapper.insert01(ttt);return "嘿嘿額黑8082";}@GetMapping("/bb")public String bb( Integer id) throws IOException {TTT ttt = utimeeMapper.select01("30");byte[] bytes = ttt.getMiaoshuByte();FileUtil.byte2File(bytes,"F:\\Desktop\\cc.docx");InputStream inputStream = ttt.getMiaoshuInputstream();FileOutputStream outputStream = new FileOutputStream("F:\\Desktop\\dd.docx");IOUtils.copy(inputStream, outputStream);//記得添加關流代碼(本代碼省略了)return "嘿嘿額黑8082";}

5.輸出成果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75655.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75655.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75655.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

qemu(2) -- 定制開發板

1. 前言 qemu支持自定義開發板,本文就記錄一下折騰的過程。基于qemu-10.0.0-rc3添加x210vb3s開發板。 2. 添加板卡文件 網上參考了一些文章,有些文章使用的版本和我的不一樣,折騰起來費了點時間,最后發現還是直接參考qemu中已有…

Python在糖尿病分類問題上尋找具有最佳 ROC AUC 分數和 PR AUC 分數(決策樹、邏輯回歸、KNN、SVM)

Python在糖尿病分類問題上尋找具有最佳 ROC AUC 分數和 PR AUC 分數(決策樹、邏輯回歸、KNN、SVM) 問題模板解題思路1. 導入必要的庫2. 加載數據3. 劃分訓練集和測試集4. 數據預處理5. 定義算法及其參數6. 存儲算法和對應指標7. 訓練模型并計算指標8. 找…

CPU(中央處理器)

一、CPU的定義與核心作用 CPU 是計算機的核心部件,負責 解釋并執行指令、協調各硬件資源 以及 完成數據處理,其性能直接影響計算機的整體效率。 核心功能: 從內存中讀取指令并譯碼。執行算術邏輯運算。控制數據在寄存器、內存和I/O設備間的…

上層 Makefile 控制下層 Makefile 的方法

在復雜的項目中,通常會將項目劃分為多個模塊或子項目,每個模塊都有自己的 Makefile。上層 Makefile 的作用是協調和控制這些下層 Makefile 的構建過程。下面是幾種常見的示例,實現上層 Makefile 對下層 Makefile 的控制。 直接調用&#xff1…

prompts提示詞經典模板

prompts.py 中的提示詞模板詳解 文件中定義了兩個核心提示詞模板:REASON_PROMPT 和 RELEVANT_EXTRACTION_PROMPT。這兩個模板在 DeepResearcher 的推理過程中扮演著關鍵角色。下面我將詳細解析這兩個模板的結構和功能。 REASON_PROMPT 詳解 REASON_PROMPT 是用于指…

使用python獲取電腦硬盤信息

import psutil# 獲取硬盤信息 disk_partitions psutil.disk_partitions() print(disk_partitions) for partition in disk_partitions:print(f"設備: {partition.device}")print(f"掛載點: {partition.mountpoint}")print(f"文件系統類型: {partitio…

HarmonyOS-ArkUI V2裝飾器: @Provider和@Consumer裝飾器:跨組件層級雙向同步

作用 我們在之前學習的那些控件中,各有特點,也各有缺陷,至今沒有痛痛快快的出現過真正能跨組件的雙向綁定的裝飾器。 比如 @Local裝飾器,不能跨組件@Param裝飾器呢,能跨組件傳遞,但是僅僅就是下一層組件接收參數。另外,它是單向傳遞,不可被重新賦值。如果您非要改值則…

索引下推(Index Condition Pushdown, ICP)

概念 索引下推是一種數據庫查詢優化技術,通過在存儲引擎層面應用部分WHERE條件來減少不必要的數據讀取。它特別適用于復合索引的情況,因為它可以在索引掃描階段就排除不符合全部條件的數據行,而不是將所有可能匹配的記錄加載到服務器層再進行…

idea在線離線安裝插件教程

概述 對于小白來說,剛使用idea時,還有很多不懂的地方,這里,簡單介紹下如何安裝插件。讓小白能容易上手全盤idea。 1、File -> Settings 2、找到 Plugins -> Marketplace 3、安裝 3.1、在線安裝 輸入想搜索的內容&#x…

豪越賦能消防安全管控,解鎖一體化內管“安全密碼”

在消防安全保障體系中,內部管理的高效運作是迅速、有效應對火災及各類災害事故的重要基礎。豪越科技憑借在消防領域的深耕細作與持續創新,深入剖析消防體系內部管理的痛點,以自主研發的消防一體化安全管控平臺,為行業發展提供了創…

ES6學習03-字符串擴展(unicode、for...of、字符串模板)和新方法()

一、字符串擴展 1. eg: 2.for...of eg: 3. eg: 二。字符串新增方法 1. 2. 3. 4. 5.

探索Streamlit在測試領域的高效應用:文檔讀取與大模型用例生成的完美前奏

大模型用例生成前置工作之文檔讀取——構建你的自動化測試基礎 在群友的極力推薦下,開始了streamlit的學習之旅。本文將介紹如何使用Streamlit開發一個多功能文檔處理工具,支持讀取、預覽、格式轉換和導出多種測試相關文檔(YAML、JSON、DOCX…

flutter 桌面應用之窗口自定義

在開發桌面軟件的時候我們經常需要配置軟件的窗口的大小以及位置 我們有兩個框架選擇:window_manager和bitsdojo_window 對比bitsdojo_window 特性bitsdojo_windowwindow_manager自定義標題欄? 支持? 不支持控制窗口行為(大小/位置)?(基本…

Cyber Weekly #51

賽博新聞 1、英偉達開源新模型,性能直逼DeepSeek-R1 本周,英偉達開源了基于Meta早期Llama-3.1-405B-Instruct模型開發的Llama-3.1-Nemotron-Ultra-253B-v1大語言模型,該模型擁有2530億參數,在多項基準測試中展現出與6710億參數的…

【JS】關于原型/原型鏈

本文會講解什么是原型,什么是原型鏈,以及查找原型的方法,最后會實現一個函數:判斷某對象是否有某屬性。 定義 原型:函數都有prototype屬性,稱作原型/原型對象 原型可以放一些方法和屬性,共享…

deskflow使用教程:一個可以讓兩臺電腦鼠標鍵盤截圖剪貼板共同使用的開源項目

首先去開源網站下載:Release v1.21.2 deskflow/deskflow 兩臺電腦都要下載這個文件 下載好后直接打開找到你想要的exe desflow.exe 然后你打開他,將兩臺電腦的TLS都關掉 下面步驟兩臺電腦都要完成: 電腦點開edit-》preferences 把這個取…

啥是Spring,有什么用,既然收費,如何免費創建SpringBoot項目,依賴下載不下來的解決方法,解決99%問題!

一、啥是Spring,為啥選擇它 我們平常說的Spring指的是Spring全家桶,我們為什么要選擇Spring,看看官方的話: 意思就是:用這個東西,又快又好又安全,反正就是好處全占了,所以我們選擇它…

正向代理 vs 反向代理:核心區別與應用場景詳解

目錄 代理服務器是什么? 正向代理(Forward Proxy)詳解 工作原理 典型應用場景 優缺點分析 反向代理(Reverse Proxy)詳解 工作原理 典型應用場景 優缺點分析 正向代理與反向代理的核心區別 對比表格 架構差異…

Matlab學習筆記五十:循環語句和條件語句的用法

1.說明 循環語句:for…end,while…end 條件語句:if…end,switch…case…end 其中if語句語法還可以是:for…else…end,for…elseif…else…end 2.簡單for程序實例 for x1:5 %循環遍歷1~5 yx5 end [1…

容器初始化Spring Boot項目原理,即web項目(war)包涉及相關類對比詳解

以下是關于 SpringBootServletInitializer、ServletContainerInitializer、SpringServletContainerInitializer、WebApplicationInitializer 和 ServletInitializer 的對比詳解及總結表格: 1. 核心對比詳解 (1) SpringBootServletInitializer 作用: S…