java代碼如何實現(xiàn)存取數(shù)據(jù)庫的blob字段
一.業(yè)務(wù)
在業(yè)務(wù)中我們被要求將文件或圖片等轉(zhuǎn)成 byte[] 或 InputStream存到數(shù)據(jù)庫的Blob類型的字段中.
二.Blob類型介紹
在 MySQL 中,Blob 數(shù)據(jù)類型用于存儲二進制數(shù)據(jù)。MySQL 提供了四種不同的 Blob 類型:
TINYBLOB: 最大存儲長度為 255 個字節(jié)。BLOB: 最大存儲長度為 65,535 個字節(jié)。MEDIUMBLOB: 最大存儲長度為 16,777,215 個字節(jié)。LONGBLOB: 最大存儲長度為 4,294,967,295 個字節(jié)。
三. Blob 對應(yīng)的 Java 類型
在 Java 中讀取 MySQL Blob 類型時,通常使用 java.sql.Blob 類型。java.sql.Blob 是一個接口,它提供了一些方法來操作 Blob 數(shù)據(jù)。
根據(jù) MySQL Blob 類型的不同,我們可以使用不同的 Java 類型來存儲 Blob 數(shù)據(jù)。
- TINYBLOB 對應(yīng)
byte[]或InputStream。 - BLOB 對應(yīng)
byte[]或InputStream。 - MEDIUMBLOB 對應(yīng)
byte[]或InputStream。 - LONGBLOB 對應(yīng)
byte[]或InputStream。
我們可以根據(jù)需要選擇合適的 Java 類型。推薦用InputStream,這樣代碼不用轉(zhuǎn)換來轉(zhuǎn)換去,比較簡單
四.上存取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轉(zhuǎn)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 轉(zhuǎn)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 {
@Autowired
private 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);//記得添加關(guān)流代碼(本代碼省略了)
return "嘿嘿額黑8082";
}5.輸出成果

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于在IDEA中SpringBoot項目中activiti工作流的使用詳解
這篇文章主要介紹了關(guān)于在IDEA中SpringBoot項目中activiti工作流的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
mybatis-plus批量更新updateBatchById問題
這篇文章主要介紹了mybatis-plus批量更新updateBatchById問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
java日期格式化YYYY-MM-dd遇坑指南小結(jié)
本文主要介紹了java日期格式化YYYY-MM-dd遇坑指南小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
深入分析Spring BeanDefinition的構(gòu)造元信息
Bean Definition是一個包含Bean元數(shù)據(jù)的對象,它描述了如何創(chuàng)建Bean實例、Bean屬性的值以及Bean之間的依賴關(guān)系,本文將帶大家深入分析Spring BeanDefinition的構(gòu)造元信息,需要的朋友可以參考下2024-01-01
Java?Stream?中的sorted?方法實現(xiàn)自定義排序全面解析(推薦)
Java?Stream?API中的sorted()方法是一個強大的中間操作,它允許我們對流中的元素進行排序,本文將深入探討如何使用sorted()方法實現(xiàn)自定義排序,涵蓋各種常見場景和高級技巧,感興趣的朋友一起看看吧2025-11-11
Java中將base64編碼字符串轉(zhuǎn)換為圖片的代碼
這篇文章主要介紹了Java中將base64編碼字符串轉(zhuǎn)換為圖片,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
mybatis教程之動態(tài)sql語句_動力節(jié)點Java學(xué)院整理
這篇文章主要介紹了mybatis教程之動態(tài)sql語句,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09

