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

数据库的存储系列———将图片存储到数据库数据库的存储—系列———将图片存储到数据库在很多时候我们都使用数据库才存储我们的数据,然而我们通常在数据库里面存放的数据大多都支持数或者是一些字符,那么如果我们想在数据库里面存放图片,那么应该要怎么做的?第一,我们可以将图片所在的路径或者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)
上一篇 2022年7月12日 下午7:16
下一篇 2022年7月12日 下午7:16


相关推荐

  • centos frp内网穿透_内网穿透 无需公网ip

    centos frp内网穿透_内网穿透 无需公网ip说明Linux搭建frp实现内网穿透操作步骤安装步骤省略(下载解压拷贝到server服务器和client服务器完事)具体移步:github注意程序文件需要追加可执行权限!注意相关端口放行!服务端配置文件:frps.ini[common]bind_port=7777authentication_method=tokentoken=12345678tls_only=truekcp_bind_port=7777max_pool_count=10l

    2025年11月5日
    3
  • 即梦ai积分怎么获得 即梦ai积分用完60就没了吗

    即梦ai积分怎么获得 即梦ai积分用完60就没了吗

    2026年3月12日
    4
  • 未处理ioexception_connection established

    未处理ioexception_connection established997错误在解释中是重叠IO正在使用中,要么使用acceptEx没有开线程,一些结果没办法处理,要么就是在x64位系统编译中出现的问题。第二种可能性最大。还在解决了,解决了再来更新

    2026年4月16日
    6
  • 海淘联想电脑必备网站(第7通道和第8通道)[通俗易懂]

    海淘联想电脑必备网站(第7通道和第8通道)[通俗易懂]目前已知联想主要打折网如下:1.http://lenovo.com【官方网站】2.http://lenovo.com/epp【联想员工】3.http://lenovo.com/spp【持股人士】4.http://lenovo.com/students【学生】5.http://lenovo.com/familyandfriends【家属及朋友】6.http://ww

    2022年5月10日
    38
  • cmd ping命令大全_ping命令怎么使用

    cmd ping命令大全_ping命令怎么使用简介:ping是一种Computernetworktools(电脑网络工具),作用是测试数据包是否能通过IP协议到达特定主机。Ping是Windows系统、Unix系统和Linux系统下的一个命令。它也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。该命令还可以加许多参数使用。例如:-t,-l,-n。(注意,所有ping指令都必须在知道IP的情况下使用)使用方法:主要的用法:1.-t:不断向目标IP发送数.

    2026年2月13日
    4
  • 河北对口计算机专业一分一档6,600分以上830人!河北一市中考一分一档表出炉!…

    河北对口计算机专业一分一档6,600分以上830人!河北一市中考一分一档表出炉!…出分啦!承德市2021年中考成绩公布6月30日,承德市教育考试招生信息平台公布2021年承德市中考成绩一分一档表!今年承德中考文化和体育是630分,理化实验20分,总计是650分。据一分一档表显示今年承德中考600分以上是830人2021年承德市中考成绩一分一档表除承德外河北其他地市什么时候能查分呢?有粉丝在后台问,衡水什么时候可以查分,这不,衡水市中考成绩发布时间也来啦~衡水市一、中考成绩发布时…

    2022年7月13日
    28

发表回复

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

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