首页 文章

从ORACLE中提取图像的正确方法(BLOB)

提问于
浏览
1

我有一个项目,我需要从BLAC格式中提取一些图像作为字符串,从ORACLE数据库通过JSON发送它 . 我正在使用Eclipse Java EE IDE .

版本:Mars Release(4.5.0)
构建ID:20150621-1200

这是将BLOB数据提取为字符串的正确方法吗?

String query = "SELECT operation, c_book, x_book, x_text1, x_text2, x_text3, x_text4,"
                           + "UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(img_logo,32670,1))FROM "
                           + dataBaseConnectionData.getDB_SHCHEMA() + "."+ dataBaseConnectionData.getDB_TABLE_COLA()
                           + " WHERE status = 'P' OR status = 'N' OR status = 'E'" 
                           + " ORDER BY c_book";

1 回答

  • 0

    有三种方法可以使用JDBC获取BLOB数据:

    Blob blob = rs.getBlob("img_logo")
    InputStream stream = rs.getBinaryStream("img_logo")
    byte[] bytes = rs.getBytes("img_logo")
    

    如果blob的大小有限,那么徽标就是,第三个版本最容易使用 .

    然后,您需要转换为字符串,这意味着您需要知道首先使用哪种编码将原始文本转换为二进制文件 . 最保守的选择是 US-ASCII ,所以:

    String text = new String(bytes, StandardCharsets.US_ASCII)
    

    当然,这假设二进制数据是文本,但它是一个徽标,并且听起来不像文本值,所以你可能意味着你想要编码二进制数据以嵌入JSON结构,进行解码在另一端回到二进制 .

    为此,您需要决定编码 . 两个最佳选择是HEX和BASE64,其中HEX将使大小加倍(每个字节两个十六进制数字),BASE64将增加33%(每3个字节4个字符) .

    对于HEX,请参阅How to convert a byte array to a hex string in Java?
    对于BASE64,请参阅How do I convert a byte array to Base64 in Java?,或使用新的Base64类(Java 8) .

相关问题