一尘不染

通过Hibernate(不是JDBC)从Blob中检索图片

hibernate

由于如何在JSP页面中从数据库检索和显示图像,我找到了一种从 db / blob
检索图像的很好的解决方案?

但这是在每个图像请求上使用 JDBC连接的 解决方案。

我正在使用 Spring 3 注释和 Hibernate 3

我试图通过我的’imageService’做类似的事情,它通过 ImageServlet类中 的注释自动装配,但是我得到了
nullPointerException ,这意味着 imageService 可能不是由依赖注入设置的。

有什么办法解决这个问题吗?我不喜欢在图像请求上建立单个jdbc连接。


阅读 405

收藏
2020-06-20

共1个答案

一尘不染

我希望您将图像以BLOB类型存储在表中(如果不尝试这样做,因为这是最佳做法)。让我们假设您有一个Person类,其中包含image存储在数据库中的人员的。如果要对此进行映射,只需在个人POJO中添加保存图像的属性。

@Column(name="image")
@Blob
private Blob image;

显示时,将其转换为a byte[]并显示。

private byte[] toByteArray(Blob fromImageBlob) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try {
      return toByteArrayImpl(fromImageBlob, baos);
    } catch (Exception e) {
    }
    return null;
  }



private byte[] toByteArrayImpl(Blob fromImageBlob, 
      ByteArrayOutputStream baos) throws SQLException, IOException {
    byte buf[] = new byte[4000];
    int dataSize;
    InputStream is = fromImageBlob.getBinaryStream();

    try {
      while((dataSize = is.read(buf)) != -1) {
        baos.write(buf, 0, dataSize);
      }    
    } finally {
      if(is != null) {
        is.close();
      }
    }
    return baos.toByteArray();
  }

您可以查看以下示例以了解更多信息。

  1. http://i-proving.com/2006/08/23/blobs-and-hibernate
  2. http://snehaprashant.blogspot.com/2008/08/how-to-store-and-retrieve-blob-object.html
  3. http://viralpatel.net/blogs/2011/01/tutorial-save-get-blob-object-spring-3-mvc-hibernate.html

如您所见,有多种方法可以做到这一点。选择一个适合您的。

2020-06-20