从 ORACLE 中提取图像 (BLOB) 的正确方法
correct way of extracting image (BLOB) from ORACLE
我有一个项目,我需要从 ORACLE 数据库中提取一些 BLOB 格式的图像作为字符串,然后通过 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";
有 3 种获取 BLOB 数据的方法 JDBC:
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 个字符)。
对于十六进制,请参阅 How to convert a byte array to a hex string in Java?
对于 BASE64,请参阅 How do I convert a byte array to Base64 in Java?, or use the new Base64 class (Java 8)。
我有一个项目,我需要从 ORACLE 数据库中提取一些 BLOB 格式的图像作为字符串,然后通过 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";
有 3 种获取 BLOB 数据的方法 JDBC:
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 个字符)。
对于十六进制,请参阅 How to convert a byte array to a hex string in Java?
对于 BASE64,请参阅 How do I convert a byte array to Base64 in Java?, or use the new Base64 class (Java 8)。