【发布时间】:2017-08-30 12:11:18
【问题描述】:
我在 derby blob 列中插入了 3 个 blob(图像)……第一次插入一个 blob,然后其他条目插入了 2 个 blob……插入一行的 blob。
blob.getLength() ,为我提供 3 个 blob( 图像) 组合的确切字节大小,这表明这 3 个 blob 已保存在 DB 中。
然后我尝试获取:
byteArray = blob.getBytes(0,blob.length());
imageIcon=new ImageIcon(byteArray);
或者
inputStream =blob.getBinaryStream();
BufferedImage image=ImageIO.read(inputStream);
imageIcon= new ImageIcon(image);
无论我使用哪个,我都只会在 Jpanel 上看到第一个 blob(图像)… 是什么阻止了其他 blob 被读取和显示?
private JTextPane createMediaArea() {
String getMediaEditorData = "select mediaEditor from settingsTable where id=6";
Statement stmtBlob;
try {
stmtBlob = settingsConn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
try (ResultSet rsMediaEditor = stmtBlob.executeQuery(getMediaEditorData)) {
System.out.println("rsMediaEditor is created ");
while (rsMediaEditor.next()) {
mediaEditorBlob = rsMediaEditor.getBlob("mediaEditor");
if (mediaEditorBlob == null) {
chosenImageIcon = new ImageIcon("./resources.jpg");
scaledChosenImage = chosenImageIcon.getImage().getScaledInstance(100, 100, Image.SCALE_FAST);
scaledImageIcon = new ImageIcon(scaledChosenImage);
mediaArea.insertIcon(scaledImageIcon);
} else {
mediaEditorBlobLength = mediaEditorBlob.length();
System.out.println("mediaEditorBlobLength is : " + mediaEditorBlobLength);
/*1st way is to get the blob array .*/
/*
byte[] mediaEditorByteArray = mediaEditorBlob.getBytes(1L, (int) mediaEditorBlobLength);
int mediaEditorByteArrayLength = mediaEditorByteArray.length;
System.out.println("mediaEditorByteArrayLength is :" + mediaEditorByteArrayLength);
*/
/*2nd way ..use ImageIO*/
InputStream binaryStream = mediaEditorBlob.getBinaryStream();
BufferedImage read = ImageIO.read(binaryStream);
chosenImageIcon= new ImageIcon(read);
scaledChosenImage = chosenImageIcon.getImage().getScaledInstance(100, 100, Image.SCALE_FAST);
scaledImageIcon = new ImageIcon(scaledChosenImage);
mediaArea.insertIcon(scaledImageIcon);
}
}
} catch (IOException ex) {
Logger.getLogger(FrontFace.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("rsMediaEditor closed !");
stmtBlob.close();
System.out.println("stmtBlob closed !");
} catch (SQLException ex) {
Logger.getLogger(FrontFace.class.getName()).log(Level.SEVERE, null, ex);
}
return mediaArea;
}
【问题讨论】:
-
如果您创建一个 ImageIcon 怎么能期望绘制 3 个图标。你能发布可运行的短代码吗?
-
@Jay Smith....所有 3 个 blob 都插入并驻留在列的一行中.... inputStream 或 byteArray 是否收集行中可用的所有字节...或的一部分?
-
您将一张图像存储在位置列*行。在 1*1 有一个图像,但在 1*2 有另一个图像。同一列但不同的行
-
@Jay Smith ...在同一列中创建多行是我在过去几天试图弄清楚的事情..到目前为止没有运气:) 找不到正确的方法this....in 接口 Blob & ResultSet ...(这迫使我使用 ByteArrayOutputStream 在一行中插入多个 blob)
标签: java arrays blob inputstream imageicon