私は解決策を見つけることができなかった問題に直面しています。そこで、これを読んでくださっている皆様にお願いがあります。この点で私を助けてください。
「.png」ファイルから画像ファイルをBlob形式でApache derby dbに保存しています。ファイルは問題なく保存されました。
derby から読み返すには、まずデータを Blob として取得し、それを InputStream に変換してから、次のコードを使用して、作成したクラス「Person」オブジェクトに格納します。
Blob patientPhoto = rs.getBlob("photo");
person.setPhoto(patientPhoto.getBinaryStream());
Class Person の概要を以下に示します。
Public class Person {
private String personName;
private InputStream photo;
public void setPhoto(InputStream photo){
this.photo = photo;
}
Public InputStream getPhoto(){
return photo;
}
}
最初に、ダービーに画像とともに保存した Person の 4 つのオブジェクトがあります。次に、これらの 4 人の人物オブジェクトを derby から取得し、Vector 配列に格納します。以下に示すように、ベクトル配列から取得して、それらを1つずつ表示し始めます
Method-1: ベクトル配列から人物オブジェクトを初期化する方法
Person data = new Person();
int i=0;
data = vector[i++];
方法-2:人物写真の表示方法
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 までのベクトル配列から取得した 4 つの写真はすべて正常に表示されましたが、人物オブジェクトをベクトル インデックス 2 から 0 まで逆方向に取得しようとすると、ヌル ポインター例外がスローされます。コード ImageIO.read(img); 「img」が null でない間は null 値を返します。
「img」がnullではないのにnullと表示される理由がわかりません。ベクトル インデックス 0 から 3 に移動している間は機能し、その後逆方向に移動すると機能しません。私を助けてください