Java+MySql图片数据保存与读取的具体实例

下面我将详细讲解“Java+MySql图片数据保存与读取的具体实例”的完整攻略,并提供两个示例。

1、前置条件

在进行Java+MySql图片数据的保存与读取前,需要保证以下条件已经满足:

  • 已经安装好 Java 开发环境
  • 已经安装好 MySql 数据库,并且能够在 Java 中连接到该数据库
  • 需要使用 JDBC 驱动程序连接 MySql 数据库,可以手动下载并添加该驱动,或者使用 Maven 或 Gradle 等依赖管理工具来添加该驱动

2、图片数据保存实例

首先需要一个保存图片到 MySql 数据库的方法,代码如下:

public static void saveImageToDatabase(String imagePath) throws SQLException, IOException {
    Connection connection = null;
    PreparedStatement statement = null;
    FileInputStream inputStream = null;
    try {
        connection = getConnection();   // 获取数据库连接
        inputStream = new FileInputStream(imagePath);  // 创建输入流对象
        statement = connection.prepareStatement("INSERT INTO image (name, content) VALUES (?, ?)");  // 创建 PreparedStatement 对象
        statement.setString(1, "test.jpg"); // 设置参数,其中第 1 个参数为文件名
        statement.setBinaryStream(2, inputStream, inputStream.available()); // 设置参数,第 2 个参数为输入流
        statement.executeUpdate(); // 执行 SQL 语句
    } finally {
        if (inputStream != null) {
            inputStream.close();
        }
        if (statement != null) {
            statement.close();
        }
        if (connection != null) {
            connection.close();
        }
    }
}

该方法接收一个图片文件的路径作为参数,然后打开该文件创建一个输入流对象,再将该输入流传递给 PreparedStatement 对象,执行插入语句。在执行语句时,会将输入流中的数据存储到 MySql 数据库中,以二进制形式存储。

3、图片数据读取实例

接下来需要一个从 MySql 数据库中读取图片数据的方法,代码如下:

public static void readImageFromDatabase() throws SQLException, IOException {
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    FileOutputStream outputStream = null;
    InputStream inputStream = null;
    try {
        connection = getConnection();   // 获取数据库连接
        statement = connection.prepareStatement("SELECT name, content FROM image WHERE id = 1"); // 创建 PreparedStatement 对象
        resultSet = statement.executeQuery(); // 执行查询语句

        if (resultSet.next()) {
            String filename = resultSet.getString("name"); // 获取文件名
            inputStream = resultSet.getBinaryStream("content"); // 获取输入流
            outputStream = new FileOutputStream(filename); // 创建输出流对象

            byte[] buffer = new byte[1024]; // 创建缓冲区
            while (inputStream.read(buffer) > 0) {  // 读取输入流中的数据到缓冲区中
                outputStream.write(buffer); // 将缓冲区中的数据写入输出流中
            }
        }
    } finally {
        if (outputStream != null) {
            outputStream.close();
        }
        if (inputStream != null) {
            inputStream.close();
        }
        if (resultSet != null) {
            resultSet.close();
        }
        if (statement != null) {
            statement.close();
        }
        if (connection != null) {
            connection.close();
        }
    }
}

该方法会从数据库中读取 id 为 1 的图片数据,并将其保存到本地磁盘中。

4、完整代码示例

下面是一个完整的 Java 类示例,其中包含了图片数据的保存和读取:

import java.io.FileInputStream;
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;

public class ImageManager {

    private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    private static final String DB_URL = "jdbc:mysql://localhost:3306/test?useSSL=false";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "123456";

    private static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(DB_URL, USERNAME, PASSWORD);
    }

    public static void saveImageToDatabase(String imagePath) throws SQLException, IOException {
        Connection connection = null;
        PreparedStatement statement = null;
        FileInputStream inputStream = null;
        try {
            connection = getConnection();   // 获取数据库连接
            inputStream = new FileInputStream(imagePath);  // 创建输入流对象
            statement = connection.prepareStatement("INSERT INTO image (name, content) VALUES (?, ?)");  // 创建 PreparedStatement 对象
            statement.setString(1, "test.jpg"); // 设置参数,其中第 1 个参数为文件名
            statement.setBinaryStream(2, inputStream, inputStream.available()); // 设置参数,第 2 个参数为输入流
            statement.executeUpdate(); // 执行 SQL 语句
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        }
    }

    public static void readImageFromDatabase() throws SQLException, IOException {
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        FileOutputStream outputStream = null;
        InputStream inputStream = null;
        try {
            connection = getConnection();   // 获取数据库连接
            statement = connection.prepareStatement("SELECT name, content FROM image WHERE id = 1"); // 创建 PreparedStatement 对象
            resultSet = statement.executeQuery(); // 执行查询语句

            if (resultSet.next()) {
                String filename = resultSet.getString("name"); // 获取文件名
                inputStream = resultSet.getBinaryStream("content"); // 获取输入流
                outputStream = new FileOutputStream(filename); // 创建输出流对象

                byte[] buffer = new byte[1024]; // 创建缓冲区
                while (inputStream.read(buffer) > 0) {  // 读取输入流中的数据到缓冲区中
                    outputStream.write(buffer); // 将缓冲区中的数据写入输出流中
                }
            }
        } finally {
            if (outputStream != null) {
                outputStream.close();
            }
            if (inputStream != null) {
                inputStream.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        }
    }

    public static void main(String[] args) {
        try {
            saveImageToDatabase("test.jpg");
            readImageFromDatabase();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

在以上示例中,通过执行 main 方法,先将图片保存到数据库中,再从数据库中读取图片并保存到本地磁盘中。注意,需要将其中的 DB_URL、USERNAME、PASSWORD 等变量修改为自己本地的 MySql 数据库配置。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java+MySql图片数据保存与读取的具体实例 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java SpringBoot快速集成SpringBootAdmin管控台监控服务详解

    Java SpringBoot快速集成SpringBootAdmin管控台监控服务 简介 Spring Boot Admin 是一个用于管理和监控 Spring Boot 应用程序的开源软件,通过 Spring Boot 的自动配置,只需要添加一个或者几个依赖就可以快速实现应用程序的管控台监控。 在本文中,我们将介绍如何快速集成 Spring Boot Ad…

    Java 2023年5月19日
    00
  • java启动参数之谜的排查过程

    以下是Java启动参数排查过程的攻略。 总览 Java应用程序的启动参数是决定应用程序行为的一些选项。这些参数可以设置Java虚拟机的行为,也可以设置应用程序的行为。当应用程序行为和预期不符时,启动参数可能就成为排查问题的关键。 下面是解决Java启动参数排查问题的一些步骤。 第一步:查看启动参数 查看启动参数是排查Java启动参数问题的第一步。可以使用以下…

    Java 2023年5月20日
    00
  • 解决SpringMVC Controller 接收页面传递的中文参数出现乱码的问题

    当Spring MVC Controller接收页面传递的中文参数时,可能会出现乱码的问题。为了解决此问题,可以采取以下步骤: 配置过滤器解决POST请求中文乱码问题 在web.xml中添加如下过滤器: <filter> <filter-name>encodingFilter</filter-name> <filte…

    Java 2023年5月20日
    00
  • Java中的try-catch-finally语句是什么?

    Java中的try-catch-finally语句是用于处理异常的一种结构。当程序运行过程中出现异常,程序会中止运行并抛出异常信息至控制台,这样会导致程序运行失败。但是在try-catch-finally代码块中,异常的抛出和处理被封装起来,程序可以在异常出现时进行自我修复,保证程序的稳定性和可靠性。 try-catch-finally语句的基本语法如下: …

    Java 2023年4月27日
    00
  • Java获取当前时间戳案例详解

    标题 Java获取当前时间戳案例详解 介绍 本文主要讲解如何使用Java获取当前时间戳的方法,并提供两个示例。时间戳是一种计算机时间的表示方法,它表示从1970年1月1日0点0分0秒(UTC,即格林威治标准时间)到现在所经过的秒数。 获取当前时间戳的方法 Java中获取当前时间戳的方法有两种: 1.使用Java标准库提供的System.currentTime…

    Java 2023年5月20日
    00
  • springboot+springsecurity如何实现动态url细粒度权限认证

    实现动态URL细粒度权限认证需要遵循以下步骤: 1.创建Spring Boot项目 创建一个新的Spring Boot项目,可以使用Spring Initializr或手动创建。 2.添加依赖 在项目中添加Spring Security依赖: <dependency> <groupId>org.springframework.boot…

    Java 2023年5月20日
    00
  • springboot整合redis修改分区的操作流程

    下面是关于“springboot整合redis修改分区的操作流程”的完整攻略: 操作流程 修改redis.conf文件 在redis.conf配置文件中搜索”hash-max-ziplist-entries”和“hash-max-ziplist-value”两个参数。这两个参数决定了Redis使用ziplist存储hash类型的数据结构时,ziplist中的…

    Java 2023年5月20日
    00
  • Java实现从jar包中读取指定文件的方法

    当我们需要从Java的一个jar包中读取指定的文件时,可以采用以下的几种方法,下面将针对每种方法进行详细讲解。 方法一:使用ClassLoader.getResourceAsStream()方法 该方法可以从一个jar包中直接读取文件的输入流,可以通过下面的步骤来实现: 确定需要读取的文件名,如 config.properties。 获取到当前线程的Clas…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部