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

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.dtcms.com/a/275223.html

相关文章:

  • 9月22日跨境电商高峰会都说了啥?郑州跨境电商发展机遇在哪?
  • Nginx的配置与使用
  • 多元思维模型:数据分析需要具备的四大能力?
  • 傅里叶方法求解正方形偏微分方程
  • Redis缓存三兄弟:穿透、击穿、雪崩全解析
  • 张量与维度
  • Grid网格布局完整功能介绍和示例演示
  • 2023年全国青少年信息素养大赛C++编程初中组决赛真题+答案解析
  • RestTemplate动态修改请求的url
  • 第一周JAVA——选择结构、循环结构、随机数、嵌套循环、数组(一维、二维)、方法、形参实参
  • 《每日AI-人工智能-编程日报》--7月11日
  • python知识:正则表达式快速入门案例:提取文章中所有的单词、提取文章中所有的数字、提取百度热搜的标题、提取ip地址
  • Web攻防-SSTI服务端模版注入利用分类语言引擎数据渲染项目工具挖掘思路
  • Umi-OCR 的 Docker安装(win制作镜像,Linux(Ubuntu Server 22.04)离线部署)
  • 数据集相关类代码回顾理解 | StratifiedShuffleSplit\transforms.ToTensor\Counter
  • 数据结构-双链表
  • 数字产品的专利战:要么布局称王,要么维权忙?
  • ABP VNext + Microsoft YARP:自定义反向代理与请求路由
  • 文件上传漏洞1-文件上传漏洞详细原理讲解与利用方式
  • 设计模式 - 面向对象原则:SOLID最佳实践
  • scrapy框架
  • 源表=电源+数字表?一文看懂SMU源表 2025-04-14
  • 大模型开发框架LangChain之函数调用
  • linux常用命令(一)
  • cnas实验室高效获证路径,cnas认证常见失败原因?
  • Linux711 Mysql
  • 使用node调用jira接口
  • [精选]如何解决pip安装报错ModuleNotFoundError: No module named ‘subprocess’问题
  • linux系统-----Redis主从复制
  • 生成对抗网络(GAN)原理详细讲解