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 实战项目之家政服务平台系统的实现流程

    针对Java实战项目之家政服务平台系统的实现流程的完整攻略,我将从以下几个方面进行详细讲解。 1. 系统需求分析 在开始编写代码之前,需要首先进行系统需求分析,这是开发一个应用程序不可或缺的一步。因为需求分析能够为开发人员提供一个设计的蓝图。 在这一步中,需要明确业务流程和产品模块,例如:用户注册、用户登录、订单管理、评价管理等。 2. 数据库设计 在完成需…

    Java 2023年5月24日
    00
  • Java Scala数据类型与变量常量及类和对象超详细讲解

    Java Scala数据类型与变量常量及类和对象超详细讲解 一、Java Scala数据类型 在Java Scala中,数据类型主要分为以下几种: 基本数据类型:包括整型、浮点型、布尔型和字符型等。 数组类型:包括一维数组和多维数组。 引用数据类型:包括类类型、接口类型、枚举类型和数组类型等。 下面我们分别对每种数据类型进行详细讲解: 1.1 基本数据类型 …

    Java 2023年5月26日
    00
  • 最优雅地整合 Spring & Spring MVC & MyBatis 搭建 Java 企业级应用(附源码)

    下面是关于整合Spring、Spring MVC和MyBatis的详细攻略,包含两个示例说明。 最优雅地整合 Spring & Spring MVC & MyBatis 搭建 Java 企业级应用 Spring、Spring MVC和MyBatis是Java企业级应用开发中常用的框架。在本文中,我们将介绍如何使用这三个框架进行整合,以搭建一个…

    Java 2023年5月17日
    00
  • 使用JSP开发WebMail系统

    使用JSP开发WebMail系统的完整攻略包括以下步骤: 1. 确定技术栈和框架 首先需要确定使用的后端技术栈和框架,可以选择使用Java语言、JSP、Servlet、Spring、Hibernate等技术栈和框架来实现WebMail系统的开发。 2. 确定功能需求 在技术栈和框架确定之后,需要确定WebMail的功能需求,包括邮件的收发、删除、搜索、分类等…

    Java 2023年6月15日
    00
  • SpringBoot项目打包发布到外部tomcat(出现各种异常的解决)

    下面我就为您讲解SpringBoot项目打包发布到外部Tomcat的完整攻略,包括出现各种异常的解决方法。 一、生成war包 在pom.xml中添加以下代码,用于生成war包: <packaging>war</packaging> 在pom.xml中添加以下代码,排除掉内嵌的Tomcat插件: <dependency> &…

    Java 2023年6月2日
    00
  • ES6 Promise对象的应用实例分析

    下面是关于 “ES6 Promise对象的应用实例分析” 的完整攻略: 简介 ES6 中引入了 Promise 对象,它是一种异步编程解决方案,可以优雅地解决回调地狱、处理多个异步操作等问题。本文主要是针对 Promise 对象的应用实例进行分析和探讨。 创建 Promise 对象 首先我们先来了解一下 Promise 对象的创建方式。创建一个 Promis…

    Java 2023年5月26日
    00
  • jsp中实现带滚动条的table表格实例代码

    下面我将为你详细讲解jsp中实现带滚动条的table表格的完整攻略。 1.使用div包裹table实现 第一种方法是使用div包裹table实现,步骤如下: 1.1 编写HTML结构 在jsp页面中,先编写HTML结构: <div id="table-wrapper"> <div id="table-scrol…

    Java 2023年6月15日
    00
  • 使用SpringJPA 直接实现count(*)

    当我们使用Spring JPA操作数据库时,经常需要统计某张表中的记录数。如果使用传统的方式,则需要编写SQL语句来进行统计,非常麻烦。而基于Spring Data JPA的特性,我们可以直接使用JPA的方法来实现统计。 我们可以通过继承JpaRepository接口来实现统计。例如下面的代码: public interface UserRepository…

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