sql >> データベース >  >> RDS >> Oracle

メモリ内の画像をBLOBに変換する

    java.awt.Image とても簡単です。画像を書き込んだり保存したりする手段も、画像の基になるピクセルデータにアクセスする手段も提供していません。

    最初のステップは、java.awt.Imageを変換することです。 ImageIOというものに サポートすることができます。これにより、画像データを書き出すことができます...

    ImageIO RenderedImageが必要です プライマリイメージソースとして。 BufferedImage デフォルトのライブラリ内でのこのインターフェイスの唯一の実装です...

    残念ながら、一方から他方に変換するための単純な方法はありません。幸いなことに、それは難しいことではありません。

    Image img = ...;
    
    BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2d = bi.createGraphics();
    g2d.drawImage(img, 0, 0, null);
    g2d.dispose();
    

    基本的に、これは元のjava.awt.Imageをペイントするだけです。 BufferedImage

    次に、InputStreamを生成できるように、何らかの方法で画像を保存する必要があります。 ...

    これは最適とは言えませんが、仕事は終わります。

    ByteArrayOutputStream baos = null;
    try {
        baos = new ByteArrayOutputStream();
        ImageIO.write(bi, "png", baos);
    } finally {
        try {
            baos.close();
        } catch (Exception e) {
        }
    }
    ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
    

    基本的に、画像をByteArrayOutputStreamに書き出します。 結果を使用してByteArrayInputStreamを生成します

    今。メモリが問題であるか、画像がかなり大きい場合は、最初に画像をFileに書き込むことができます。 次に、Fileを読み取るだけです。 ある種のInputStreamを介して戻ってきます 代わりに...

    最後に、InputStreamを設定します 必要な列に...

    PreparedStatement stmt = null;
    //...    
    stmt.setBlob(parameterIndex, bais);
    

    そして、ブロブはあなたの叔父です...



    1. SQL ServerでのCOT()の例

    2. Oracle19用のHibernate方言

    3. Javaを使用して、データベースの最大IDに従って次のIDを生成します

    4. SQLLIMITおよびOFFSETクエリを使用してすべてのレコードを選択する