2011-01-27 42 views
0

我想創建SQL查詢,返回一些值,其中一個值是blob如何查詢blob?

當我只是把blob列在我選擇它返回BigDecimal:|

其純JDBC查詢與參數

回答

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

插入..

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

其實setBytes()(而不是setObject())可能更便於攜帶。但這在很大程度上取決於JDBC驅動程序 – 2011-01-27 08:13:09

1

嘗試從ResultSet調用getBytes()方法:

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

這應該將您的blob對象作爲字節數組返回。