当前位置: 首页 > ops >正文

BLOB 数据的插入与读取详解

BLOB 数据的插入与读取详解

在数据库操作中,BLOB(Binary Large Object)类型用于存储大型二进制数据,如图片、音频、视频、PDF 文件等。下面我将详细说明如何使用 JDBC 和 PreparedStatement 处理 BLOB 数据。

📦 BLOB 数据类型概述

数据库BLOB 类型最大大小
MySQLBLOB, LONGBLOB4GB (LONGBLOB)
OracleBLOB4GB
SQL ServerVARBINARY(MAX)2GB
PostgreSQLBYTEA, OID (大对象)1GB (BYTEA)

🧩 BLOB 数据插入流程

1. 创建数据库表

CREATE TABLE documents (id INT PRIMARY KEY AUTO_INCREMENT,file_name VARCHAR(255) NOT NULL,content LONGBLOB,       -- MySQLmime_type VARCHAR(100)  -- 存储文件类型
);

2. Java 插入 BLOB 数据

public void saveDocument(String fileName, InputStream inputStream, String mimeType) {String sql = "INSERT INTO documents (file_name, content, mime_type) VALUES (?, ?, ?)";try (Connection conn = dataSource.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql)) {// 设置文件名和MIME类型pstmt.setString(1, fileName);pstmt.setString(3, mimeType);// 设置BLOB参数if (inputStream != null) {pstmt.setBinaryStream(2, inputStream);} else {pstmt.setNull(2, Types.BLOB);}int affectedRows = pstmt.executeUpdate();if (affectedRows == 0) {throw new SQLException("Insert failed, no rows affected.");}} catch (SQLException e) {throw new DataAccessException("Failed to save document", e);}
}

3. 使用示例

// 从文件系统读取文件
File file = new File("path/to/document.pdf");
try (FileInputStream fis = new FileInputStream(file)) {documentDao.saveDocument(file.getName(), fis, "application/pdf");
}

📥 BLOB 数据读取流程

1. Java 读取 BLOB 数据

public Document getDocumentById(int id) {String sql = "SELECT file_name, content, mime_type FROM documents WHERE id = ?";Document document = new Document();try (Connection conn = dataSource.getConnection();PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setInt(1, id);try (ResultSet rs = pstmt.executeQuery()) {if (rs.next()) {document.setId(id);document.setFileName(rs.getString("file_name"));document.setMimeType
http://www.xdnf.cn/news/15113.html

相关文章:

  • Linux驱动学习day22(interrupt子系统)
  • [python]在drf中使用drf_spectacular
  • 卢比危机下的金融破局:科伦坡交易所技术升级作战图
  • SpringBoot JWT
  • NFS文件存储及论坛项目搭建(php)
  • Web攻防-SSTI服务端模版注入利用分类语言引擎数据渲染项目工具挖掘思路
  • MCU芯片内部的ECC安全机制
  • OpenCV图像基本操作:读取、显示与保存
  • 《数据库》MySQL备份回复
  • AI加持的开源知识库新秀:PandaWiki,如何用它打造智能化文档系统?
  • 新作品:吃啥好呢 - 个性化美食推荐
  • [面试] 手写题-爬楼梯,斐波那契数列
  • 利用Claude code,只用文字版系统设计大纲,就能轻松实现系统~
  • Kafka——应该选择哪种Kafka?
  • 京东携手HarmonyOS SDK首发家电AR高精摆放功能
  • 【深度学习新浪潮】图像生成有哪些最新进展?
  • 光电耦合器在电冰箱开关电源的应用
  • pandas销售数据分析
  • Cesium实战:交互式多边形绘制与编辑功能完全指南(最终修复版)
  • 前端面试专栏-算法篇:23. 图结构与遍历算法
  • Java(7.11 设计模式学习)
  • python的社区残障人士服务系统
  • Grok 4全面解析:马斯克的多智能体AI如何颠覆技术边界
  • 格式规范公文处理助手:一键排版 标题 / 正文 / 页码一键调,Word 脚本自定义
  • 嵌入式学习笔记--MCU阶段--day03中断
  • 网安系列【16】之Weblogic和jboss漏洞
  • 二层环路避免-STP技术
  • Transformer架构:结构介绍
  • STM32F103C8T6单片机内部执行原理及启动流程详解
  • 使用Tensorflow和CNN进行猫狗图片训练的实战总结