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

news2024/11/15 21:49:30

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这个工具。。。

 一定不要把数据类型搞错了

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

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

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

 <dependencies>
        <!-- com.mysql/mysql-connector-j -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.1.0</version>
        </dependency>

        <!-- org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.10.0</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

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

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

 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.从数据库中读取文件。

 @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);
        }
    }

读取完成你会发现:

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

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

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;

/**
 * <p>Project: filesJDBC - Dome</p>
 * <p>Powered by scl On 2023-08-03 19:30:58</p>
 * <p>描述:<p>
 *
 * @author scl [1846080280@qq.com]
 * @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: 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>filesJDBC</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <!-- com.mysql/mysql-connector-j -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.1.0</version>
        </dependency>

        <!-- org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.10.0</version>
            <scope>test</scope>
        </dependency>

    </dependencies>
</project>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/832449.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redux-promise-middleware和applyMiddleware的理解与使用

一、作用&#xff1a; applyMiddleware是一个中间件&#xff0c;通常和applyMiddleware结合使用&#xff0c;是dispatch与reducers之间的应用&#xff0c;用于处理dispatch发送的异步action操作 二、使用 1、安装redux-promise-middleware cnpm i redux-promise-middleware…

GB28181智能安全帽方案探究及技术实现

什么是智能安全帽&#xff1f;​ 智能安全帽是一种集成先进科技的安全帽&#xff0c;可基于GB28181规范&#xff0c;适用于铁路巡检、电力、石油化工等高风险行业的作业人员&#xff0c;以及消防、救援等紧急情况下的安全防护。 智能安全帽通常具有以下功能&#xff1a; 实时…

WEB开发的基础知识

WEB开发的基础知识 1、java SE 和 java EE 2、web开发的基本理念 3、URI和URL 4、http请求方式 5、get和post的区别 6、web开发行业术语

hdu Perfect square number

题意&#xff1a; 有n个数&#xff08;n<300&#xff09;&#xff0c;将其中的任意的一个数改为x&#xff08;x在[1,300]&#xff09;&#xff0c;求改之后&#xff0c;区间和为完全平方数的最大区间个数是多少 思路&#xff1a; 将a[x]改之后的区间个数等于&#xff1a;改…

ThinkPHP v6.0.8 CacheStore 反序列化漏洞

漏洞说明 1. 漏洞原理&#xff1a;ThinkPHP 6.0.8 CacheStore 会触发POP利用链子&#xff0c;造成任意命令执行 2. 组件描述&#xff1a; ThinkPHP是一个免费开源的&#xff0c;快速、简单的面向对象的轻量级PHP开发框架 3. 影响版本&#xff1a;V6.0.8 漏洞复现 1. 环境安…

【Linux命令200例】which用于查找指定命令所在路径

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜…

【C++】STL——queue的介绍和使用、queue的push和pop函数介绍和使用、queue的其他成员函数

文章目录 1.queue的介绍2.queue的使用2.1queue构造函数2.2queue的成员函数&#xff08;1&#xff09;empty() 检测队列是否为空&#xff0c;是返回true&#xff0c;否则返回false&#xff08;2&#xff09;size() 返回队列中有效元素的个数 &#xff08;3&#xff09;front() 返…

PHP从入门到精通—PHP开发入门-PHP概述、PHP开发环境搭建、PHP开发环境搭建、第一个PHP程序、PHP开发流程

每开始学习一门语言&#xff0c;都要了解这门语言和进行开发环境的搭建。同样&#xff0c;学生开始PHP学习之前&#xff0c;首先要了解这门语言的历史、语言优势等内容以及了解开发环境的搭建。 PHP概述 认识PHP PHP最初是由Rasmus Lerdorf于1994年为了维护个人网页而编写的一…

【C语言学习】数据类型转换

一、自动类型转换 1.当运算符两边的数据类型不同时&#xff0c;C语言会帮我们将其转换为较大的类型。即将数据转换成表达范围更大的类型。 将前一种类型转换为后一种类型 char --> short --> int --> long --> long long int --> float --> double2.对于…

数据结构:插入排序

直接插入排序 插入排序算法是所有排序方法中最简单的一种算法&#xff0c;其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中&#xff0c;最终得到的序列就是已经排序好的数据。 直接插入排序是插入排序算法中的一种&#xff0c;采用的方法是&#xff1a;在…

网盘共享文件的优势及对团队办公的帮助

伴随着科技的发展&#xff0c;互联网逐步渗透了企业办公方式。各种类型的网盘应运而生&#xff0c;成为当下文件共享的主要方式之一。那么网盘共享文件有什么优势&#xff1f;对团队办公有何帮助呢&#xff1f; 网盘共享文件的优势 1、方便快捷&#xff1a;用户通过移动设备即…

MYSQL进阶-事务

什么是数据库事务&#xff1f; 事务是一个不可分割的数据库操作序列&#xff0c;也是数据库并发控制的基本单位&#xff0c;其执 行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上 的一组操作&#xff0c;要么都执行&#xff0c;要么都不执行。 事务最…

Vulnhub: hacksudo: aliens靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.175 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.175 目标80端口backup目录存在文件mysql.bak&#xff0c;下载后查看获得mysql账号密码 登录9000端口的phpmyadmin&#xf…

节日福利发什么?OI易问卷调查员工意见,“卷”赢其他公司

春节、妇女节、端午节、中秋节、元宵节、周年庆……近几年各公司之间的员工福利比拼“卷”上新高度&#xff0c;让HR、行政每逢佳节倍焦虑。 节日福利是表达公司对员工的关心和感谢&#xff0c;同时提高员工的归属感和满意度。礼品、购物券、节日慰问金、节日活动、食品饮料……

七牛云存储绑定域名

1、七牛云添加 加速域名方法&#xff1a; 注意&#xff1a;七牛云新增域名 需要 和 网站 解析的二级域名保持一致 其他值参考 如何绑定 使用七牛云托管视频&#xff0c;使用cdn加速

网工内推 | 云计算工程师专场,CCNP/HCIP认证优先

01 弧聚科技 招聘岗位&#xff1a;网络工程师&#xff08;云计算方向&#xff09; 职责描述&#xff1a; 1、作为H3C初级云计算交付工程资源培养对象&#xff0c;需配合完成相关华三产品及服务规范培训。 2、培训赋能后&#xff0c;安排到H3C云项目交付中进行项目交付及驻场支…

Java基础篇_1.5——程序流程控制之循环结构【包含各种图形练习】

1、循环结构 循环&#xff1a;java中的循环有 while / do-while / for 。循环结构的特点是给定的循环条件成立时&#xff0c;反复执行某段程序&#xff0c;直到循环条件不成立。 1.2 while循环 定义变量并赋初始值 while(循环条件){// 循环体&#xff0c;要改变循环变量 } 注意…

【计算机网络】应用层协议 -- DNS协议

文章目录 1. DNS背景2. 域名简介3. 域名解析过程4. 使用dig查看DNS过程 1. DNS背景 DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;协议&#xff0c;是一个用来将域名转化为IP地址的应用层协议。 TCP/IP当中通过IP地址和端口号的方式&#xff0c;来确定…

pygame示例滚动的气球

pygame示例滚动的气球 使用pygame实现一个滚动的气球。 import sys, pygame # 将有限的常量和函数集放入脚本的全局名称空间中 from pygame.locals import *# 初始化pygame模块 pygame.init() # 创建图形窗口&#xff0c;pygame把图形表示为Surface对象 size width, height …

增强知识保护和知识管理:PDM系统的知识库特色

在现代竞争激烈的商业环境中&#xff0c;知识保护和知识管理对企业的发展至关重要。PDM系统&#xff08;Product Data Management&#xff0c;产品数据管理&#xff09;作为一款强大的数字化工具&#xff0c;具备丰富的知识库特色&#xff0c;帮助企业增强知识保护和知识管理的…