数据库的存储系列———将图片存储到数据库

数据库的存储系列———将图片存储到数据库数据库的存储—系列———将图片存储到数据库在很多时候我们都使用数据库才存储我们的数据,然而我们通常在数据库里面存放的数据大多都支持数或者是一些字符,那么如果我们想在数据库里面存放图片,那么应该要怎么做的?第一,我们可以将图片所在的路径或者URI存入到数据库里面,这样简单方便。不过这样的缺点也很显然,就是图片路径改变的时候,我们没有办法通过数据库来获取这一张图片。所以这种方法并不是我们所想要的将图片存

大家好,又见面了,我是你们的朋友全栈君。

数据库的存储系列———将图片存储到数据库

在很多时候我们都使用数据库才存储我们的数据,然而我们通常在数据库里面存放的数据大多都支持数或者是一些字符,那么如果我们想在数据库里面存放图片,那么应该要怎么做的?

第一,我们可以将图片所在的路径或者URI存入到数据库里面,这样简单方便。不过这样的缺点也很显然,就是图片路径改变的时候,我们没有办法通过数据库来获取这一张图片。所以这种方法并不是我们所想要的将图片存储到数据的方法。

第二,将图片转化成二进制字节流才存储到数据库。在查看数据库所支持的基本类型当中,我们不难发现数据库支持BLOB和CLOB这种数据类型。那么我们就将图片以这种形式存入到数据库,然后在从数据库中还原这图片

public class ImageUtil { 
   


    public static void main(String[] args) throws IOException  {
        String imagePath = "C:\\Users\\pc\\Desktop\\446968702368648824.jpg";
        byte[] bytes = null;
// 将图片转化为二进制流
        bytes = imageToByte(imagePath);

        for (byte byte1 : bytes) {
            System.out.print(byte1);
        }

// 将二进制图片转化为字符串
// String string = new String(bytes);
// System.out.println(string);

        String path = "C:\\Users\\pc\\Desktop\\446.jpg";
// 将二进制流转化为图片
        byteToImage(bytes, path);

    }

    public static byte[] imageToByte(String path) throws IOException {
        FileInputStream fileInputStream = new FileInputStream(new File(path));
        byte[] bytes = new byte[fileInputStream.available()];
        fileInputStream.read(bytes);
        fileInputStream.close();

        return bytes;
    }
    //输出图像到新的路径
    public static void byteToImage(byte[] bytes,String newPath) throws IOException {
        FileOutputStream fileOutputStream = new FileOutputStream(new File(newPath));
        fileOutputStream.write(bytes);
        fileOutputStream.close();
    }

}

这样就可以通过将图片的字节流放入到数据库中存储了,如果要使用的话,将其转化出来就可以了。不过这里图片不能够太大,BLOB最大能够支持64K的图片,不同数据库有不同的数据类型,大家可以去找找。当然以上代码还提供了能将二进制流变为了字符串的方法(显示看到的是乱码)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158243.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android华为账号登陆,华为手机怎么找回华为账号密码?华为账号密码两种找回方法…

    android华为账号登陆,华为手机怎么找回华为账号密码?华为账号密码两种找回方法…忘记华为账号密码真的是一件让人头疼的事,账号绑定的游戏进不去、喜欢的主题无法下载,真是让人干着急,别担心,小编这就整理了一些如何找回华为账号密码的方法,一起来了解下吧!方法一通过华为官方链接找回密码您可以通过此华为官方链接:https://cloud.huawei.com/,点击“忘记密码”找回华为账号密码方法二通过手机客户端重置密码未登录华为帐号:进入手机“设置”>“华为帐号”&gt…

    2022年6月24日
    108
  • noip2014普及组复赛试题_大一高数期末考试试题

    noip2014普及组复赛试题_大一高数期末考试试题T1考察计算机基础知识,所谓集成电路是将大量的晶体管和电子线路组合在一块硅片上,故又称为芯片。故选AAA。T2HTMLHTMLHTML超文本标记语言阅读方式是浏览器,浏览器主要用于显示网页服务器。T3英特尔公司是全球最大的个人计算机零件和CPU制造商。T4TCP/IP模型AAA项最符合该图形式。T5快速排序的期望复杂度是O(nlogn)O(nlogn)O(nlogn)的,最坏情况(已经排好序的序列)是O(n2)O(n^2)O(n2)的。T6第一代:电子管计算机第二代:晶体管计

    2022年8月22日
    5
  • 怎样用Google APIs和Google的应用系统进行集成(1)—-Google APIs简介

    怎样用Google APIs和Google的应用系统进行集成(1)—-Google APIs简介

    2022年1月20日
    50
  • 如何激活成功教程汽车–CAN协议

    如何激活成功教程汽车–CAN协议如何激活成功教程汽车–CAN协议1介绍2激活成功教程流程(以转速表为例)引自[2]一辆车就是一个网络连接到网络工具硬件软件CANbus激活成功教程CAN协议设置识别重播模糊测试可能的问题参考1介绍汽车后装的辅助驾驶设备,一般需要知道汽车的CAN协议,各汽车厂家的CAN协议又是保密的,这时就需要激活成功教程,因为CAN协议是明文,所以激活成功教程也就轻松些。2激活成功教程流程(以转速表为例)引自[2]一辆车就是一个网络一辆汽车由多台计算机组成,以控制发动机、变速器、窗户、锁、灯等。这些计算机被称为电子控制单元(ECU),它们通过网

    2022年6月28日
    58
  • google软件测试之道_gtest测试框架

    google软件测试之道_gtest测试框架gtest提供了一套优秀的C++单元测试解决方案,简单易用,功能完善,非常适合在项目中使用以保证代码质量。

    2022年9月29日
    4
  • 【系统架构设计师】第一章:操作系统(1.1.1—1.1.2)操作系统的分类和结构

    【系统架构设计师】第一章:操作系统(1.1.1—1.1.2)操作系统的分类和结构好久不见了。最近由于忙着期末考试,所以一直没更新帖子,最近考完了,我又回来了。很久不动笔了,突然很手痒,但是又一直在纠结写什么。原计划要写kali的从零开始的教程,不过仔细想想其实那个并没有系统架构师的专注力大,因为这个是我的一个目前的目标。你们知道的,我今年大二,下个学期会特别忙,有七八场ctf和awd,线上线下的都有,这就意味着我基本整个学期的一半都要在外地跑。更别说还有实习,招警考试…想想就头疼。不过好在我学计算机还是比较有天赋的,所以专业课反而是最轻松的一个。但是,我的想法不仅仅只是课程.

    2022年6月28日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号