我试图使用查询从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值中获得十六进制的其他方法吗?
答案 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();
}
很简单......