如何从blob数据类型中获取完整的十六进制值?

时间:2016-04-07 23:40:43

标签: java sql hex blob oracle12c

我试图使用查询从Java的BLOB列获取十六进制值,所以:

SELECT RAWTOHEX(UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(thumbnail, 2000,1))) thumbnail FROM thumbnails  

如果我使用下一个查询:

SELECT LENGTH(thumbnail) FROM thumbnails 

所有缩略图的字节长度超过6000字节

它工作的第一个查询,因为我给它2000字节,因为这是varchar2文件类型的大小:

如何修改查询以获取所有缩略图(所有字符)而不仅仅是2000个字符?或者从blob值中获得十六进制的其他方法吗?

1 个答案:

答案 0 :(得分:1)

我在不使用SQL的情况下解决了这个问题,只使用了Java: 查询将正常执行:

String query = "SELECT thumbnail FROM Thumbnails"
ResultSet rs = DBManager.getInstance().execute(query);

并在Java中获取Blob的值:

Blob thumbnail;
if (rs.next()){
    thumbnail = rs.getBlob("thumbnail");
    byte[] blobBytes = thumbnail.getBytes(1, (int)thumbnail.length());
    return Hex.encodeHexString(blobBytes).toUpperCase();
}
很简单......