簡體   English   中英

如何從Oracle DB中存儲的CLOB列中檢索圖像

[英]How to retrieve image from a CLOB column stored in Oracle DB

我想檢索作為CLOB存儲在Oracle DB中的base64映像。 為此,我嘗試了使用Worklight適配器從derby檢索作為CLOB存儲的base64映像中提到的方法。

https://www.ibm.com/developerworks/community/blogs/dhuyvett/entry/jsonstore_revisited_in_worklight_v6_part_1_the_adapter?lang=zh-CN

這里使用的驅動程序類是:oracle.jdbc.driver.OracleDriver。 使用的查詢:從table_name中選擇*;

適配器中的代碼:var clob = response.resultSet [0] .CLOB_COL; var bytes = clob.getSubString(1,clob.length());

錯誤:Ecma錯誤:TypeError:在對象oracle.sql.CLOB中找不到函數getSubString。

TLDR: oracle.sql.CLOBjava.sql.CLOB不同。 您所指的站點談論的是第二種類型,但是您正在使用第一種。


Oracle JDBC文檔中可以看到, oracle.sql.CLOB類型沒有方法getSubStringgetBytes

但是, java.sql.CLOB具有您要查找的getSubString方法,如doc中所示 即使它們看起來很相似,它們還是來自不同庫的不同類型。 然后,您需要使用Oracle api中的toJdbc方法將Oracle CLOB轉換為Java CLOB。 返回的對象將具有您需要的getSubString方法。

因此,從技術上講,這應該可行:

var clob = response.resultSet[0].CLOB_COL.toJdbc(); // Oracle -> Java
var bytes = clob.getSubString(1, clob.length());

為了完整性進行編輯 :您還對getBytes方法感到困惑,該方法僅存在於java.sql.BLOB BLOB和CLOB以及不同的類型也是如此。 對所有類型和庫要特別小心。 它們看起來都一樣,但是都有自己的API。 特別是當您從網絡上獲取代碼片段時,您確實需要知道您使用的是哪種類型。

您可以直接在ResultSet對象上調用getString() ,然后在Java中執行從BASE64到二進制的轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM