我面临一个我找不到解决方案的问题。所以请求所有阅读本文的人。请在这方面帮助我。
我将图像文件从“.png”文件保存到 apache derby db 作为 Blob 格式。文件保存没有任何问题。
要从 derby 读取数据,我首先将数据作为 Blob 获取,然后将它们转换为 InputStream,然后使用以下代码将其存储到我创建的类“Person”对象中
Blob patientPhoto = rs.getBlob("photo");
person.setPhoto(patientPhoto.getBinaryStream());
类人的概述如下所示
Public class Person {
private String personName;
private InputStream photo;
public void setPhoto(InputStream photo){
this.photo = photo;
}
Public InputStream getPhoto(){
return photo;
}
}
最初,我将四个 Person 对象与图像一起存储在 derby 中。然后我从 derby 中检索这四个人对象并将它们存储到 Vector 数组中。我从向量数组中开始一一显示它们,如下所示
方法一:从向量数组初始化人物对象的方法
Person data = new Person();
int i=0;
data = vector[i++];
方法二:人物照片的展示方法
InputStream img = data.getPhoto();
// The image recieved from db should be buffered as it is not real file
// but bytes of streams
BufferedImage buffImg = null
if(img!=null){
try {
buffImg = ImageIO.read(img);
} catch (IOException e) {
e.printStackTrace();
}
//a panel with JLabel where Image will be displayed
pnlImg.setImage(buffImg);
}
try {
img.close();
} catch (IOException e) {
e.printStackTrace();
}
从索引 0 到 3 的向量数组检索的所有四张照片都显示正常,但是当我尝试从向量索引 2 到 0 向后获取人员对象时,会引发空指针异常。代码 ImageIO.read(img); 当“img”不为空时返回空值。
我无法理解为什么它显示为 null 而“img”不为 null。从矢量索引 0 到 3 时,它工作,然后向后退,它不工作。请帮我