2017-06-07 28 views
0

オブジェクト配列(Oracleデータベースのネイティブクエリの出力です)のうち、最初の要素はJava Stringオブジェクトに変換する必要のあるCLOBデータ型です。どうすればこれを達成できますか?助けてください。オブジェクトを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表の列です。 result(1)は私のCLOBデータを持っています

私はHashMapを入れているうちにresult(1)をStringとして解析する必要があります。

+0

と私のCLOB列をマップされました。 – 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を見て)

EDIT:

をあなたの質問に投稿したコードは次のようになります:

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'を'((Clob)result [1])] 'に置き換えなければならないことを除いてもっと何が必要ですか?私はこれを私の答えに加えることができます。 –

+0

コードを編集していただきありがとうございます。しかし、私は複数のIDとデータの行を期待しているので、forループが必要です。心配しないでください、それは問題ではありません。私は次のことを試した。 Clobデータ=(Clob)result [1]; データは次のようになります。 clob2:STRINGDECODE( 'name' 'pearl' '\ nバリデーション')。 STRINGDECODE関数についてさらに検索したところ、clobデータに改行文字があります。新しい行文字を削除すると、データは次のようになります。 clob2:( 'name' 'pearl' 'validations') このクエリをH2データベースで実行しようとしています。 – PeaceIsPearl

0

です。 はあなたの問題を再現するために必要な[MCVE]のJavaを含む(および、必要に応じて、SQL)コードを入力してくださいjavax.persistence.Lob

@Lob 
@Column(name = "DATA") 
byte[] clobData 
関連する問題