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日

相关文章

  • 解决Tomcat启动报异常java.lang.ClassNotFoundException问题

    下面是解决Tomcat启动报异常java.lang.ClassNotFoundException问题的完整攻略。 问题背景 在使用Tomcat启动项目时,有时候会出现java.lang.ClassNotFoundException异常,这是因为Tomcat无法找到相关的类文件。在这种情况下,需要进一步排查问题并解决它。 解决方法 1. 检查类路径 首先,需要…

    Java 2023年5月19日
    00
  • JavaWeb实现文件上传与下载实例详解

    JavaWeb实现文件上传与下载实例详解 1. 实现文件上传 1.1. HTML表单 首先需要编写一个表单用于上传文件: <form action="FileUploadServlet" method="post" enctype="multipart/form-data"> <i…

    Java 2023年5月19日
    00
  • Java Swing最详细基础知识总结

    Java Swing最详细基础知识总结 什么是Java Swing Java Swing是一个GUI工具包,用于在Java应用程序中创建可视化用户界面。它提供了许多功能强大的组件,包括按钮、文本框、标签和表格等,使得我们可以快速方便的创建GUI界面,对于Java开发者来说是非常重要的工具。 Java Swing组件 Java Swing提供了许多GUI组件,…

    Java 2023年5月26日
    00
  • SpringBoot整合JPA框架实现过程讲解

    Spring Boot整合JPA框架实现过程讲解 在Spring Boot中,我们可以使用JPA框架来操作数据库。JPA是Java Persistence API的缩写,是一种Java ORM框架,可以将Java对象映射到关系型数据库中。本文将手把手教你如何在Spring Boot中整合JPA框架,包括添加依赖、配置数据源、创建实体类、创建Repositor…

    Java 2023年5月14日
    00
  • Java 超详细讲解异常的处理

    Java 超详细讲解异常的处理 什么是异常? 在 Java 中,异常指的是程序在运行过程中发生了意外情况或错误,导致程序无法继续运行的情况。比如数组访问越界、空指针等。 异常的分类 在 Java 中,异常分为两类:受检异常和非受检异常。 受检异常(Checked Exception) 受检异常指的是在编译时就能够发现的异常,需要在代码中显式的进行处理。比如读…

    Java 2023年5月19日
    00
  • spring AOP定义AfterThrowing增加处理实例分析

    下面为您详细讲解Spring AOP定义AfterThrowing增加处理实例的完整攻略。 什么是Spring AOP? Spring AOP(Aspect Oriented Programming)是Spring框架的一个重要特性,主要为了解决在面向对象编程中的一些常见问题,如日志等处理。 Spring AOP主要是通过代理和横切面实现的,代理是对目标对象…

    Java 2023年5月19日
    00
  • java 验证码的生成实现

    下面是关于“Java 验证码的生成实现”的完整攻略。 1. 确定技术方案 在 Java 中,一般可以采用以下两种方式来生成验证码: 使用 Java 第三方库生成验证码; 自己编写生成验证码的代码。 第三方库使用比较方便,而且功能比较完善,但不可避免地会增加项目的依赖。自己编写则可以自由定制,但需要自己写代码,处理各种问题。 因此,我们需要在考虑项目的实际需求…

    Java 2023年6月15日
    00
  • 深入jaxb xjc编码问题的详细介绍

    下面我来详细讲解“深入JAXB XJC编码问题的详细介绍”的攻略。 什么是JAXB XJC? JAXB(Java Architecture for XML Binding)是Java中一个处理XML编码和解码的框架。JAXB XJC是JAXB中用于将XSD(XML Schema Definition)文件转换为Java类的工具。它可以生成一组Java类,包括…

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