BLOBを返すDBプロシージャがあります。誰かがBLOBを操作する方法を教えてもらえますか?このための特定のAPIはありますか?
このための特定のAPIはありますか?
確かに、JDBCAPIです。
結果セットから任意の値を取得するのと同じように、Blob
インスタンスを取得します。次に、このBlob
でget...
-およびset...
メソッドを使用する必要があります。
ここでは、基本的に2つのオプションがあります。
バイト配列を操作します。
byte[]
を介してデータを含むBlob.getBytes
を取得しますBlob.setBytes
を使用して元に戻します。InputStream
/OutputStream
を操作する:
InputStream
から Blob.getBinaryStream
を保持しますBlob.setBinaryStream
を使用します。別のアプローチは、最初にBlob
をいじることをスキップし、代わりにResultSet
-インターフェースを介して直接2番目のアプローチ(ストリームを使用)を使用することです。
含まれているblobの種類(画像、ビデオ)とその拡張子によって異なります。 DBから画像を取得してJSPページに表示する簡単なプログラムを作成しました。それが役に立てば幸い。
JSPページ
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<image src="blobAction"/>
</body>
サーブレットページ
byte[] imgData = blobDao.getInstance().getPhoto();
response.setContentType("image/gif");
OutputStream o = response.getOutputStream();
o.write(imgData);
o.flush();
o.close();
呼び出し手順
public byte[] getPhoto() {
byte[] imgData = null;
Blob img = null;
ResultSet rs = null;
Statement stmt = null;
try {
conn = getConnection();
String sqlQ = "SELECT CONTENT_FILE FROM CONTENT where id = 'something';
stmt = conn.createStatement();
rs = stmt.executeQuery(sqlQ);
while (rs.next()) {
img = rs.getBlob("CONTENT_FILE");
imgData = img.getBytes(1, (int) img.length());
}
rs.close();
stmt.close();
conn.close();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
return imgData;
}
}
Simple Java JDBC Apiを使用すると、 ResultSet
から _Java.sql.Blob
_ を取得できます。
ResultSet.getBlob(index)
またはResultSet.getBlob(String columnName)
。どちらもBlob
を返します。
Blob
を取得したら、 Blob.getBytes()
メソッドから_byte[]
_を取得するか、 setBytes()
を使用して設定できます) メソッド。
更新:一部のデータベースドライバーベンダーがBlob
をサポートしていないことを確認すると、 ResultSet.getBinaryStream()
を使用できます。
javax.sql.rowset.serial.SerialBlob を使用できます。
SpringBoot&Angular4アプリケーションで次のように使用しています。
SerialBlob serialBlob = new SerialBlob(byte[])