如何从企业java bean中的数据库中检索图像? (使用JPA和JSP)

时间:2016-12-21 07:17:12

标签: database jsp ejb

我的问题如下:所以我有一个数据库,其中存储了一些客户。对于每个客户,我添加了这样的图片:

INSERT INTO ITSO.CUSTOMER (TITLE,FIRST_NAME,LAST_NAME,SSN,IMAGE) VALUES ('Mr','Henry','Cui','111-11-1111', LOAD_FILE('D:/Workspace8/Images/11.jpg'));

如何在Enterprise java bean中检索这些图片? (我必须提到我正在使用JPA)。查询是解决方案吗?

@NamedQuery(name="getImageForCustomer", query="select image from Customer c where c.ssn=?1")

我是否需要以不同的方式存储照片? 在EJB中我有这个方法getCustomer()。我可以添加另一个参数,比如Byte [] image ??

public Customer getCustomer(String ssn) throws ITSOBankException {
    System.out.println("getCustomer: " + ssn);
    try {           
    return entityMgr.find(Customer.class, ssn);
    } catch (Exception e) {
        System.out.println("Exception: " + e.getMessage());
        throw new ITSOBankException(ssn);
    }

我的计划是使用servlet和EJB注入在JSP中显示图像。

如果有人可以帮助我,我将非常感激!!!

(这是为了学习目的)

1 个答案:

答案 0 :(得分:0)

首先,将图像存储在数据库中并不是很好的做法。虽然它足以用于学习目的,但在实际应用中考虑将图像存储在您选择的文件系统或云服务中,并仅存储路径或链接到图像。

但回到你的问题。 在Customer JPA课程中,您可以为使用javax.persistence.Lob注释添加注释的图片定义字段:

@Lob private byte[] image;

...并且您的图像数据将由JPA加载到image字节数组字段中。

要在JSP页面上显示图像,您必须实现servlet,它将根据客户ID提供图像数据(例如 / image?customerId = 10 )。以下是如何实现这样一个servlet的一个很好的例子:How to convert byte array to image