如何将图像保存到数据库中(Java vs SQL)

时间:2012-08-02 13:54:46

标签: java sql database

我在SQL 2008 Enterprise中有一个名为Student_Images的表,其中S_Images列名称的数据类型是image。现在我如何将图像插入数据库。我在谷歌上搜索并访问了50多个网站,有人说将其转换为Base64,有些人说将其转换为字节等,但如果列类型是图像那么什么。请指导我。

4 个答案:

答案 0 :(得分:2)

请不要这样做。数据库不是文件系统。创建一个包含文件名的列,并将图像存储在一个文件夹中。

答案 1 :(得分:1)

您不应将图像存储在数据库中。正如第一条评论所指出的那样,它将占用大量空间。更推荐存储路径和文件名。

我想也许你没有在stackoverflow you have a great answer about the subject中搜索正确的方法。

还有一件事。你的问题全部大写,避免使用,难以阅读,因此答案较少。

答案 2 :(得分:1)

查看JDBC API Javadocs。您必须创建一个Blob对象,填写文件中的数据,并将其用作(准备)语句的列。与任何其他数据类型一样,只需要几行代码即可创建Blob。

以下是Tutorials如何开始的链接。

与其他答案不同, 是在数据库中存储二进制数据最符合的情况。仅存储对文件系统的引用可能会带来繁重的备份和可访问性问题(仅仅因为您可以连接到数据库而不是意味着您可以访问文件所在的文件系统)。

答案 3 :(得分:0)

是。

  • 如果图像尺寸很大,那么最好创建图像的元数据,将其引用保存到数据库中,并将实际图像保存在光盘上。这比在数据库中保存图像要快。
  • 当图像尺寸较小时,将图像保存在数据库中

如果你想测试一下它是如何工作的。获取任何类型的图像并将其转换为字节数组流,如下所示:

BufferedImage originalImage = ImageIO.read(new File(
        "resources/image/Test.png"));

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(originalImage, "jpg", baos);
baos.flush();
byte[] imageInByte = baos.toByteArray();
  • 创建blob列以保存表中的数据
  • 执行insert语句将数据插入表中。