如何在Java中操作BLOB?

时间:2011-10-17 07:09:19

标签: java blob

我有一个返回BLOB的DB过程。谁能告诉我如何操纵BLOB?是否有任何特定的API?

4 个答案:

答案 0 :(得分:14)

  

是否有针对此的特定API?

当然,JDBC API。


您可以抓住Blob实例,就像从结果集中获取任何值一样。然后,您应该使用此get...上的set... - 和Blob方法。

这里你基本上有两个选择:

另一种方法是首先跳过弄乱Blob,而是直接通过ResultSet - 接口使用第二种方法(使用流)。

答案 1 :(得分:5)

取决于哪种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>

Servlet页面

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

答案 2 :(得分:2)

使用Simple Java JDBC Api,您可以从java.sql.Blob获得ResultSet

  1. ResultSet.getBlob(index)
  2. ResultSet.getBlob(String columnName)
  3. 两者都返回Blob

    获得Blob后,您可以从Blob.getBytes()方法返回byte[]或使用setBytes()方法进行设置。

    更新:看到某些数据库驱动程序供应商不支持Blob,您可以使用ResultSet.getBinaryStream()

答案 3 :(得分:0)

您可以使用javax.sql.rowset.serial.SerialBlob

我在我的SpringBoot&amp;中使用它像这样的Angular4应用程序:

  • 从Angular4 app
  • 获取Base64String
  • 将Base64String解码为byte []
  • 像这样创建SerialBlob:SerialBlob serialBlob = new SerialBlob(byte[])
  • 使用JpaRepository
  • 将其存储在数据库中