2016-04-07 8 views
1

Ich versuche, einen hexadezimalen Wert von einer BLOB-Spalte von Java unter Verwendung einer Abfrage so zu erhalten:Wie erhält man einen vollständigen hexadezimalen Wert vom Blob-Datentyp?

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

wenn ich die nächste Abfrage:

SELECT LENGTH(thumbnail) FROM thumbnails 

die Bytelänge aller Vorschaubilder sind über 6000 Bytes

die erste Abfrage funktioniert es, weil ich es 2000 Byte gebe, weil das die Größe von varchar2 Dateityp:

Ho W kann ich die Abfrage ändern, um alle Miniaturansichten (alle Zeichen) und nicht nur 2000 Zeichen zu erhalten? oder eine andere Möglichkeit, um hexadezimal von einem Blob-Wert zu erhalten?

Antwort

1

löste ich dieses Problem ohne SQL zu verwenden, nur mit Hilfe von Java: die Abfrage normaler ausgeführt werden würde:

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

und den Wert als Blob in Java erhalten:

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

sehr einfach. ..