2017-06-07 283 views
0

我有一個對象數組(它是Oracle數據庫中的本機查詢的輸出),第一個元素是CLOB數據類型的第一個元素,它需要轉換爲Java String對象。我將如何實現這一目標?請幫忙。將對象轉換爲CLOB

String sql = "select id, data from mytable"; 
      List<Object[]> results = getEntityManager().createNativeQuery(sql).getResultList(); 
Map< Long, String > map = new HashMap<>(); 
     for (Object[] result : results) { 
      map.put(((Number) result[0]).longValue(), (String) result[1]); 
     } 

data是具有CLOB數據類型的mydata表中的列。 結果(1)將有我的CLOB數據

雖然放入HashMap我需要解析結果(1)作爲字符串。

+0

請提供[MCVE]包括Java語言(如果必要的話,SQL)代碼需要複製您的問題。 – MT0

+0

添加了我的代碼。請檢查 – PeaceIsPearl

+0

[如何使用java從Oracle恢復CLOB值](https://stackoverflow.com/questions/19486648/how-to-retrive-the-clob-value-from-oracle-using-java ) – Rene

回答

0

如果CLOB的長度足夠小(< Integer.MAX_VALUE),你可以做到以下幾點:

clob.getSubString(1, (int) clob.length()); 

(只是看看this question

編輯:

您提交的問題代碼應爲:

String sql = "select id, data from mytable"; 
List<Object[]> results = getEntityManager().createNativeQuery(sql).getResultList(); 
Map< Long, String > map = new HashMap<>(); 
Clob clob = (Clob)result[1]; 
String value = clob.getSubString(1, (int) clob.length()); 
map.put(((Number) result[0]).longValue(), value); 

請注意,原始代碼中的循環是絕對無用的,所以我將其刪除。

檢查也是result[1]java.sql.Clob

+0

我已更新我的查詢。你能查看一下嗎? – PeaceIsPearl

+0

@PeaceIsPearl對不起,但我沒有看到你需要什麼,除了你必須用'((Clob)result [1])]'替換'clob'。我可以在我的回答中添加這個。 –

+0

感謝您編輯代碼。但我需要for循環,因爲我期待多個id和數據行。沒關係,那不是問題。我試了下面的東西 Clob data =(Clob)result [1]; 數據如下所示: clob2:STRINGDECODE('name''pearl''\ n驗證')。 進一步搜索關於STRINGDECODE函數,它在那裏,因爲我有一個clob數據中的換行符。如果我刪除新的行字符,我會看到數據如下所示: clob2:('name''pearl''validations') 我想讓這個查詢在H2數據庫上運行。 – PeaceIsPearl

0

作爲解決我的查詢,擺脫了本機查詢和使用休眠來代替。 映射我CLOB列與javax.persistence.Lob

@Lob 
@Column(name = "DATA") 
byte[] clobData