如何将文件写入数据库呢???(走过路过不要错过)

1.首先建立数据库。。。建立一个名为books的数据库,建立一个fs表。

create database if not exists books;
use books;
create table fs(
    id int unsigned auto_increment primary key ,
    name varchar(50) not null ,
    files longblob
);

假如你不喜欢代码建立,也可以直接用数据库管理工机来建立,注意数据类型。

我用的是navicat这个工具。。。

如何将文件写入数据库呢???(走过路过不要错过)_第1张图片

 一定不要把数据类型搞错了如何将文件写入数据库呢???(走过路过不要错过)_第2张图片

 准备工作完成后我们建立一个maven项目。。。不会的小伙伴可以参考这篇博客)

maven的下载安装与配置环境变量!!!(全网最详细)_明天更新的博客-CSDN博客

2.建立好maven项目我们要添加依赖:

如何将文件写入数据库呢???(走过路过不要错过)_第3张图片

 
        
        
            com.mysql
            mysql-connector-j
            8.1.0
        

        
        
            org.junit.jupiter
            junit-jupiter-api
            5.10.0
            test
        

    

3.建立Java文件。这里用到JDBC的内容和单元测试这两个部分。

(一定要注意我们是在这个包下面建立的Java文件)

如何将文件写入数据库呢???(走过路过不要错过)_第4张图片

 4.编写Java程序。(这是将jpg存入数据库)我用的是本地照片。。。

写Java程序时注意你的数据库名字是否正确。

@Test @DisplayName("将文件存入数据库中")
    void savefile() {
        InputStream is = null;
        String file = "C:\\Users\\admin\\Desktop\\girl.jpg";
        File f = new File(file);
        String fn = f.getName();
        try {
            is = new FileInputStream(f);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            try {
                Connection conn = DriverManager.getConnection("jdbc:mysql:/books", "root", "");
                PreparedStatement ps = conn.prepareStatement("insert into fs(name,files) values (?,?)");
                ps.setString(1, fn);
                ps.setBlob(2, is);
                int result = ps.executeUpdate();
                if (result > 0) {
                    System.out.println("成功将" + fn + "存入数据库");
                }
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

如何将文件写入数据库呢???(走过路过不要错过)_第5张图片

 你可以点击鼠标右键将文件保存下来,看是否正确。

你以为这就完了????

远远不够,我们再写一个读取程序,将这个照片读取出来。。。。

5.从数据库中读取文件。

 @Test@DisplayName("从数据库中读取文件")
    void readfile() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            try {
                Connection conn = DriverManager.getConnection("jdbc:mysql:/books", "root", "");
                PreparedStatement ps = conn.prepareStatement("select * from fs");
                ResultSet rs = ps.executeQuery();
                while (rs.next()) {
                    InputStream inputStream = rs.getBinaryStream(3);
                    OutputStream out = new FileOutputStream(UUID.randomUUID().toString().concat(".jpg"));
                    byte[] bytes = new byte[10240];
                    while (inputStream.read(bytes) > 0) {
                        out.write(bytes);
                    }
                }
            } catch (SQLException e) {
                throw new RuntimeException(e);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

读取完成你会发现:

如何将文件写入数据库呢???(走过路过不要错过)_第6张图片

 什么你说你想要照片???

照片没有,代码倒是有。。。

Java:

/*
 * Copyright (c) 2020, 2023,  All rights reserved.
 *
 */
package cn.scl;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.io.*;
import java.sql.*;
import java.util.UUID;

/**
 * 

Project: filesJDBC - Dome

*

Powered by scl On 2023-08-03 19:30:58

*

描述:

* * @author scl [[email protected]] * @version 1.0 * @since 17 */ public class Dome { @Test@DisplayName("从数据库中读取文件") void readfile() { try { Class.forName("com.mysql.cj.jdbc.Driver"); try { Connection conn = DriverManager.getConnection("jdbc:mysql:/books", "root", ""); PreparedStatement ps = conn.prepareStatement("select * from fs"); ResultSet rs = ps.executeQuery(); while (rs.next()) { InputStream inputStream = rs.getBinaryStream(3); OutputStream out = new FileOutputStream(UUID.randomUUID().toString().concat(".jpg")); byte[] bytes = new byte[10240]; while (inputStream.read(bytes) > 0) { out.write(bytes); } } } catch (SQLException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } @Test @DisplayName("将文件存入数据库中") void savefile() { InputStream is = null; String file = "C:\\Users\\admin\\Desktop\\girl.jpg"; File f = new File(file); String fn = f.getName(); try { is = new FileInputStream(f); } catch (FileNotFoundException e) { throw new RuntimeException(e); } try { Class.forName("com.mysql.cj.jdbc.Driver"); try { Connection conn = DriverManager.getConnection("jdbc:mysql:/books", "root", ""); PreparedStatement ps = conn.prepareStatement("insert into fs(name,files) values (?,?)"); ps.setString(1, fn); ps.setBlob(2, is); int result = ps.executeUpdate(); if (result > 0) { System.out.println("成功将" + fn + "存入数据库"); } } catch (SQLException e) { throw new RuntimeException(e); } } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } }

 xml: 



    4.0.0

    org.example
    filesJDBC
    1.0-SNAPSHOT

    
        17
        17
        UTF-8
    
    
        
        
            com.mysql
            mysql-connector-j
            8.1.0
        

        
        
            org.junit.jupiter
            junit-jupiter-api
            5.10.0
            test
        

    

你可能感兴趣的:(数据库,idea,java,单元测试,jdbc)