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

时间:2015-09-25 15:27:48

标签: java oracle blob

我有一个项目,我需要从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 :(得分: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)。