2011-01-27 16 views
0

いくつかの値を返すSQLクエリを作成したいと思います。これらの値の1つはブロブです。ブロブを照会する方法は?

私はちょうど私の選択にBLOB列を置くとき、それはBigDecimalを返します:

答えて

2

Materializing Blob Dataのjavadocsのセクションを見てください。

BLOB列にgetBlobを呼び出し、バイナリストリームを読み取る必要があります。

Blob blob = rs.getBlob("BLOB_COLUMN_NAME");   
    InputStream blobStream = blob.getBinaryStream(); 

    //e.g. save blob to a file 
    FileOutputStream out = new FileOutputStream("file.txt"); 
    byte[] buffer = new byte[1024]; 
    int n = 0; 
    while((n = blobStream.read(buffer)) != -1) { 
     out.write(buffer, 0, n); 
    } 
    out.flush(); 
    out.close(); 
    blobStream.close(); 
1

挿入パラメータを持つ

そのプレーンなJDBCクエリ..

stmt = con.prepareStatement("INSERT INTO TABLE(fileName, " 
      + "blobData) VALUES(?, ?)"); 
     stmt.setString(1, "somefilename"); 
     stmt.setObject(2, data);//data is byte[] 
     stmt.executeUpdate(); 

選択...

ResultSet rs; 

    stmt = con.prepareStatement("SELECT blobData " 
     + "FROM BlobTest " + "WHERE fileName = ?"); 

    stmt.setString(1, "somevalue"); 
    rs = stmt.executeQuery(); 
    if (!rs.next()) { 
     System.out.println("No such file stored."); 
    } else { 
     Blob b = rs.getBlob(1); 
     BufferedOutputStream os; 
+0

(setObject()の代わりに)実際にsetBytes()は移植性が高いかもしれません。しかし、これはJDBCドライバに大きく依存します –

1

ResultSetからgetBytes()メソッドを呼び出そうとしてください。

stmt = dbConn.prepareStatement("SELECT ..."); 
ResultSet rs = stmt.executeQuery(); 
byte[] blob = rs.getBytes(1); 

これは、BLOBオブジェクトをバイト配列として返します。

関連する問題