文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

保存图片到MySQL&从MySQL读取图片

2023-09-14 13:28

关注

🍉接上次 爬取坤坤表情包 ,这次我们直接将表情包存到MySQL数据库而不是本地。🍉

首先创建一个数据库,数据库名为ikun,表名为img,3个字段分别为id(图片id)、img(二进制码)、date(存储时间)

其中,二进制码的存储格式应该为 BLOB类型,下面为不同类型对应的最大存储空间

  1. TINYBLOB 255个字节
  2. BLOB 65535字节
  3. MEDIUMBLOB 16M
  4. LONGBLOB 4G
USE ikun; CREATE TABLE `img` (  `id` int NOT NULL AUTO_INCREMENT,  `img` mediumblob NOT NULL,  `date` date NOT NULL,  PRIMARY KEY (`id`)) ;

将图片转为二进制流

对于图片的输入和输出,我们更多使用BufferedInputStream或者BufferedOutPutStream

public static void saveInMySQL(String url) throws IOException {        //获得连接对象        Connection con = DBUtil.getConnection("root","******","ikun");        PreparedStatement pre = null;        //获取图片信息,做输出流        InputStream in = getEntityByHttpGetMethod(url).getContent();        BufferedInputStream inputStream = new BufferedInputStream(in);        try {            String sql = "insert into img (img,date) values (?,?)";            pre = con.prepareStatement(sql);            pre.setBinaryStream(1,inputStream,in.available());            Date date = new Date(System.currentTimeMillis());            pre.setDate(2,date);            //获取返回结果            int i = pre.executeUpdate();            System.out.println(i);        } catch (SQLException e) {            e.printStackTrace();        }    }

查看效果

将二进制流转为文件输出到本地查看

public static void readFromMysql(){        //获得连接对象        Connection con = DBUtil.getConnection("root","******.","ikun");        PreparedStatement pre = null;        ResultSet res = null;        try {            //这里读取一张            String sql = "select * from img where id = 1";            pre = con.prepareStatement(sql);            res = pre.executeQuery(sql);            while (res.next()){                int id = res.getInt("id");                InputStream stream = res.getBinaryStream("img");                Date date = res.getDate("date");                System.out.println("图片id为"+id+" 创建时间为"+date.toString());                Files.copy(stream, Paths.get("D:\\ikun.jpg"));            }        } catch (SQLException | IOException e) {            e.printStackTrace();        }        //断开连接        DBUtil.close();    }

         我发现阅读量挺高的但是没人收藏,确实,一般人相信看完下面就果断划走了,但试错不易,能不能留个点赞再走呢,谢谢~


🍊通常我们建议不要直接将图片存到数据库中,而是放到本地磁盘目录下,我们通常将图片统一命名,通过其文件名或路径来访问数据库实现获取图片的目的。

🍅而不建议直接往数据库存放图片的原因如下:

  1. 数据库性能下降:存储大量数据将占用大量的磁盘空间和系统资源,特别影响数据库性能,尤其是多用户访问的情况
  2. 数据库的备份和维护变得困难,且可读性差
  3. 压力测试:多用户同时上传或下载图片时,将导致数据库服务器压力负载过大
  4. 图片质量下降:比如我们待会的运行结果其实是这样的,左边是我们下载到本地的图片,右边则是下载到数据库,再从数据库读取出来的效果。而且我将二进制数值类型设置为最大还是模糊。

来源地址:https://blog.csdn.net/m0_64261982/article/details/129864820

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯