2017-04-05 9 views
0

私は3つのblob(画像)をderby blob列に挿入しました...最初に1つのblobを挿入し、次に2つのblobを挿入しました。すべてのBlob画像がjpanelで表示されない

blob.getLength()は、3つのブロブ(画像)を結合した正確なバイトサイズを返します。これは、3つのブロブがDBに保存されていることを示唆しています。

は、それから私は取得してみてください:

byteArray = blob.getBytes(0,blob.length()); 
imageIcon=new ImageIcon(byteArray); 

それとも私が使用してどの

inputStream =blob.getBinaryStream(); 
BufferedImage image=ImageIO.read(inputStream); 
imageIcon= new ImageIcon(image); 

が、私は最初のブロブ(画像)を取得JPanelの... に表示するものであることから、ブロックの他のブロブを読んで見せて?

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

ImageIconを1つ作成した場合、どのように3つのアイコンを描くことができますか。実行可能なショートコードを投稿できますか? –

+0

@Jay Smith ....すべての3つのBLOBが列の1つの行に挿入され、常駐します.... inputStreamまたはbyteArrayは、行の...または一部で使用可能なすべてのバイトを収集しますか? – Mohd

+0

ロケーションカラム*行に1つのイメージを保存します。 1 * 1には1つの画像がありますが、1 * 2には別の画像があります。同じ列だが異なる行 –

答えて

0

javaでは、jdbcを使用してデータベースと対話します。例https://docs.oracle.com/javase/tutorial/jdbc/についてはこちらをご覧ください。

jdbcは、データベース行をJavaオブジェクトに取り込むために使用されます。

+0

...リンクのおかげで....この部分には解決策があるかもしれません。 JdbcRowSetオブジェクト ".... – Mohd