当前位置: 首页 > 面试题库 >

显示来自PostgreSQL数据库的图像bytea

孔运良
2023-03-14
问题内容

此代码将图片test.gif放入图片位值中。

public void addImage() throws SQLException, IOException {
    Connection con = openConnection();

    File file = new File("test.gif");
    FileInputStream fis = new FileInputStream(file);
    PreparedStatement ps = con.prepareStatement("INSERT INTO image VALUES (?, ?, ?)");
    ps.setString(1, file.getName());
    ps.setBinaryStream(2, fis, (int)file.length());
    ps.setInt(3,1);
    ps.executeUpdate();
    fis.close();

}

我的下一个目标是显示以字节为单位保存在数据库中的图片。如何才能做到这一点 ?


问题答案:

就像是:

// Run a query again the IMAGE table to fetch the image with the given id
public Image readImage(Connection conn, int id) throws SQLException {
  PreparedStatement pstmt = null;
  try {
    pstmt = conn.prepareStatement("SELECT contents FROM image WHERE id = ?");
    pstmt.setInt(1, id); 
    ResultSet rs = ps.executeQuery();
    if (rs.next()) {
      InputStream is = rs.getBinaryStream(1);
      return ImageIO.read(is);
    } else {
      return null;
    }
  } finally {
    if (pstmt != null) {
      try {
        pstmt.close();
      } catch (SQLException ignored) {
      }
    }
  }
}

// Display the given Image on a Swing frame
public void showImage(final Image img) {
  JFrame frame = new JFrame("Image");
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setSize(img.getWidth(), img.getHeight());
  frame.add(new JPanel() {
    public void paint(Graphics g) {
      g.drawImage(img, 0, 0, null);
    }
  });
  frame.show();
}

可能为您工作。



 类似资料:
  • 问题内容: 我正在尝试显示从blob数据类型的MySQL数据库检索的图像。无法找出是什么原因导致图像列显示这样的数据而不是图像图标。 … 问题答案: 由于您曾经存储图像,因此我必须假定您存储的是物理图像文件/格式,而不仅仅是像素数据。 您需要回读此图像格式并将其转换为Swing / Java支持的图像格式。 首先获取对数据库字段的引用… 一旦有了,就可以使用它的二进制文件并读取数据… 现在,你可以

  • 问题内容: 很难说出这里的要求。这个问题是模棱两可的,模糊的,不完整的,过于广泛的或修辞性的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 6年前关闭。 我有将图像存储在列中的MySQL数据库。我想在PrimeFaces中展示它们。我该如何实现? 问题答案: 您可以使用来显示存储在中的图像,而不管其来源(数据库,磁盘文件系统,网络等)如何。最简单的例子是: 指

  • 问题内容: 嗨,我的数据库中有一个图像表。这些与细节一起存储为Blob,例如图像类型和名称。 我在显示图像时遇到问题,我得到的只是一个带有红色十字的白框。码: 谢谢 问题答案: 好吧,这是一个简短的答案。 检查您的Blob类型是否至少为MEDIUMBLOB,它能够存储高达16M的数据

  • 问题内容: 所以我的最后一个问题是如何从搜索中显示我的techID: 我正在尝试让我的“详细信息”页面引用通过techID链接的服务器的两个独立部分 我的新问题仍在此页面上。我还添加了回声图像。但在使用和显示我的图像而不是二进制JPEG数据时遇到了麻烦。我一直在尝试寻找这种情况的另一个实例,但是找不到任何可以解决我的错误的实例。 和 是我到目前为止提出的最后一个问题中唯一的更改(显然包括我得到的有

  • 在尝试了“php artisan存储:链接”等解决方案后,图像仍然无法在前端(vuejs)中显示。 图像本身存储在“storage/public/app/xxx.png”中 vuejs中的代码是。 我试图通过浏览器访问图像”http://127.0.0.1:80/api/storage/xxx.png,但导致“未找到” 任何线索都将不胜感激。

  • 我有时需要以直方图的形式显示图像数据的表示。我对访问图像数据的方法特别感兴趣。我熟悉,其中包括直方图支持,但我会考虑其他方法。