并非所有 Blob 图像都显示在 jpanel 中

not all Blob images shows in jpanel

我在 derby blob 列中插入了 3 个 blob(图像)......第一次插入一个 blob,然后其他条目插入 2 个 blob ...插入一行的 blob。

blob.getLength() ,给出了 3 个 blob(图像)组合的确切字节大小,这表明这 3 个 blob 已保存在数据库中。

然后我尝试获取:

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;
}

在java中我们使用jdbc与数据库交互。有关示例,请参见此处 https://docs.oracle.com/javase/tutorial/jdbc/

和 jdbc 用于将数据库行检索到 java 对象中。