开发过程中,有时候会用到用mysql存储image图片,今天螃蟹就详细分析一下这一过程。
需求描述
1、将指定目录下或指定的路径文件存储到mylsq数据库中
2、读该取数据库中的数据,将存储的图片文件读取并存储到指定目录下
需求分析
1、图片的内容以二进制流的形成存到mysql的blob字段中
2、获取输出流,生成图片,并且要检查从数据库读取的图片是否可以正常使用
数据库表设计及数据初始化
如下图,我们创建一张表itxxzImg,包含以下字段信息
然后插入测试数据,如以下代码,需要注意的就是存储二进制流需要用ps.setBinaryStream(...)方法,并且第三个参数为int类型,而file.length()为long类型,需求进行一下转换,这个在高版本的mysql驱动中应该得到了解决。
- public static void insert() {
- try {
- for (int i = 0; i < filePath.length; i++) {
- File file = new File(filePath[i]);
- if (!file.exists()) {
- continue;
- }
- ps = getConnection().prepareStatement(INSERT_SQL);
- ps.setInt(1, 0);
- ps.setString(2, file.getName());
- ps.setBinaryStream(3, new FileInputStream(file), (int) file.length());
- ps.setLong(4, file.length());
- ps.executeUpdate();
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
初始化后,数据如下:
剩余的工作就比较简单了,读取数据库中的content内容,IO流读取即可
完整代码
- package com.itxxz.db;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- /**
- *
- * @author IT学习者-螃蟹
- * @date 2015-1-14
- * @url www.itxxz.com
- *
- */
- public class ItxxzTest {
- /**数据库执行语句*/
- private static final String SELECT_SQL = "SELECT ID ,NAME,CONTENT,FILE_SIZE FROM ITXXZIMG";
- private static final String INSERT_SQL = "INSERT INTO ITXXZIMG( ID ,NAME,CONTENT,FILE_SIZE) VALUES(?,?,?,?)";
- /** 数据库链接配置 */
- // 驱动路径
- private static final String driver = "com.mysql.jdbc.Driver";
- // 用户
- private static final String userName = "root";
- // 密码
- private static final String passwrod = "root";
- // 链接地址
- private static final String url = "jdbc:mysql://localhost:3306/itxxz";
- /** 数据库操作类 */
- private static Connection conn = null;
- private static PreparedStatement ps = null;
- private static ResultSet rs = null;
- private static Statement stmt = null;
- // 初始化参数
- private static final String[] filePath = { "E:/itxxz/logo.png",
- "E:/itxxz/banner.jpg", "E:/itxxz/ad.png" };
- private static final byte[] Buffer = new byte[1024];
- private static final String filedir = "E:/itxxz/img/";
- private static FileOutputStream fos;
- public static void main(String[] args) {
- //insert();
- selectAndExport();
- }
- /**
- * 创建链接
- */
- public static Connection getConnection() {
- try {
- Class.forName(driver);
- conn = DriverManager.getConnection(url, userName, passwrod);
- } catch (ClassNotFoundException e) {
- System.err.println(e.getMessage());
- } catch (SQLException e) {
- System.err.println(e.getMessage());
- }
- return conn;
- }
- /**
- * 新增
- */
- public static void insert() {
- try {
- for (int i = 0; i < filePath.length; i++) {
- File file = new File(filePath[i]);
- if (!file.exists()) {
- continue;
- }
- ps = getConnection().prepareStatement(INSERT_SQL);
- ps.setInt(1, 0);
- ps.setString(2, file.getName());
- ps.setBinaryStream(3, new FileInputStream(file), (int) file.length());
- ps.setLong(4, file.length());
- ps.executeUpdate();
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
- /**
- * 查询并导出
- */
- public static void selectAndExport() {
- try {
- PreparedStatement pst = getConnection().prepareStatement(SELECT_SQL);
- rs = pst.executeQuery();
- // 循环记录集,查看每一行每一列的记录
- while (rs.next()) {
- String fileName = rs.getString("name");
- InputStream is = rs.getBinaryStream("content");
- exportImg(is, fileName);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- /**
- * 关闭
- */
- public static void close() {
- try {
- // 关闭记录集
- if (rs != null) {
- rs.close();
- }
- if (ps != null) {
- ps.close();
- }
- if (stmt != null) {
- stmt.close();
- }
- if (conn != null) {
- conn.close();
- }
- } catch (SQLException e) {
- System.err.println(e.getErrorCode());
- }
- }
- /**
- * 导出数据库中二进制流图片
- */
- public static void exportImg(InputStream is, String fileName) {
- File dir = new File(filedir);
- if (!dir.exists()) {
- dir.mkdirs();
- }
- try {
- File file = new File(filedir+fileName);
- if(!file.exists()){
- file.createNewFile();
- }
- fos = new FileOutputStream(file);
- int size = 0;
- while ((size = is.read(Buffer)) != -1) {
- fos.write(Buffer, 0, size);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
相关推荐
### MySQL存储图片的知识点 #### 引言:数据库与图片信息管理 在现代数据库应用程序,尤其是基于WEB的应用中,图片信息的存储与显示是常见需求。传统的做法是将图片存储在服务器上的特定目录中,而数据库仅存储...
接下来,我们需要创建一个数据库表来存储图片信息。表通常会包含一个`BLOB`(Binary Large Object)字段,用于存储二进制数据。例如,创建一个名为`Images`的表,结构如下: ```sql CREATE TABLE Images ( ID INT ...
MySQL存储图片读取图片
本文将详细介绍如何使用C#结合MySQL数据库来存储和读取图片。 #### 一、存储图片 为了实现图片的存储功能,我们需要通过一系列步骤将图片转换为字节流,并将其保存到MySQL数据库中的一个`MediumBlob`类型的字段里...
#### 一、MySQL存储图片的基本原理 在MySQL数据库中存储图片主要通过二进制格式来实现。由于图片本质上是由一系列的二进制数据构成的,因此将其作为二进制大对象(Binary Large Object, BLOB)类型存储是一种常见且...
在IT行业中,数据库管理是...综上所述,"mysql,blob格式存储图片事例,商品展示页面"是一个涉及数据库设计、图片处理、前后端交互等多个环节的综合实践。理解并掌握这些知识点对于构建功能完备的商品展示系统至关重要。
在Java编程中,有时我们需要将图片等大容量的二进制数据存储到数据库中,MySQL提供了BLOB(Binary Large Object)类型,专门用于存储大块的二进制数据。本实例将详细介绍如何使用Java和MySQL进行图片的存取操作。 ...
5. 查询和显示:使用ResultSet获取BLOB数据,转换回字节数组,然后用ImageIO将字节数组转换回图片并显示。 三、网络编程 在网络编程中,图片的存储和检索通常与HTTP协议和Web服务器紧密结合。当用户请求图片时,...
在本例中,将详细讲解如何使用Python语言以及Pymysql包,对图片进行存储和读取的操作,这涉及到数据库的操作和图片的二进制处理。 首先,我们需要了解什么是Pymysql。Pymysql是一个Python语言中的数据库驱动模块,...
在存储图片时,可以同时生成不同尺寸的缩略图,然后存储它们的二进制数据或路径。这可以通过GD库或Imagick扩展在PHP中实现。 此外,安全方面也需要关注。确保文件上传过程安全,避免非法文件类型的注入,例如通过`...
MySQL是一种广泛使用的开源关系型数据库管理系统,它支持多种存储类型,包括用于存储二进制大数据的BLOB(Binary Large Object)类型,非常适合存储图片数据。 当我们将图片存储到MySQL时,首先需要创建一个包含...
在 MySQL 中存储图片需要使用 BLOB 字段,并使用 PreparedStatement 对象来执行 UPDATE 语句,在读取图片时,需要使用 ResultSet 对象来获取 BLOB 字段的数据,然后使用 FileOutputStream 对象将图片数据写入到文件...
在IT行业中,数据库管理和编程是两个...通过理解这些基本概念和操作,你可以构建出自己的C#应用程序,有效地从MySQL数据库中读取和处理图片数据。在实际应用中,还需要考虑安全性、性能优化和错误处理等其他关键因素。
在MySQL中存储图片涉及到数据库操作和文件上传,这个实验旨在教你如何将图片作为二进制数据存储在数据库中,然后在网页中展示。这个过程通常包括创建数据库表、处理文件上传以及将文件内容插入到数据库。 首先,...
总之,易语言结合MySQL数据库,提供了一种有效的方法来处理和存储图片数据。通过理解数据库连接、SQL命令以及二进制数据的操作,你可以实现从数据库中读取和写入图片,这对于各种需要存储和展示图像的应用场景都非常...
总的来说,C#结合MySQL数据库进行照片存储涉及文件读取、数据库连接、SQL语句执行和参数化查询。这个过程对于开发涉及用户上传照片的应用程序非常常见,例如社交网络或个人博客系统。了解并掌握这些技术对于任何C#...
MySQL存储过程调用显示图片源码(C#)是将数据库中的二进制图像数据通过C#编程语言处理并展示在应用程序中的技术实现。这个过程涉及到了数据库操作、数据类型转换以及用户界面显示等多个方面。以下将详细介绍这个主题...
在Android平台上,将照片存储到MySQL云数据库并从其中读取是一个常见的需求,尤其是在构建具有云存储功能的应用程序时。本项目实现了一个功能,允许用户将相册中的照片上传到MySQL云数据库,然后可以从数据库中下载...
另一种方式是存储图片的文件路径或URL,将图片实际存储在文件系统中,这可以减轻数据库的压力,但需要处理文件系统的同步问题。 在数据库中存储图片的具体步骤如下: 1. **编码**:图片通常以JPEG、PNG或GIF等格式...
存储图片后,我们可以通过查询数据库获取图片数据,然后将其转换为`InputStream`,再利用IO流读取并显示图片。这通常在Web应用中实现,例如通过Servlet将二进制流响应给浏览器。 总结: 在MySQL中存储图片涉及创建...