7

休止状態 (3.2.1.GA) では、次のメソッドを使用して CLOB 型のデータを Oracle (10g) データベースに挿入します。

Hibernate.createClob(parameters.get("txtCatImage"));

parametersMapすべてのリクエスト パラメータが格納されている場所です。Clobデータベースからデータ型を直接取得している間、このようなものは機能しentityObj.getCatImage()ません。

thisthisの質問を見ましたが、方法が見つかりませんでした。

Clob以下は、 type プロパティを使用するエンティティです。

public class Category  implements java.io.Serializable {

    private Long catId; // Primary key.
    private Clob catImage; // CLOB type field.
    // Other fields.
    private static final long serialVersionUID = 1L;

    public Category() {}

    // Overloaded constructs + getters + setters + hashcode() + equals() + toString().
}

この場合、データベースのClobフィールドには画像ファイル名が格納されるだけです。

4

5 に答える 5

9

Clob.getSubString(long, int)適切な引数を指定して呼び出して目的の値を取得するか、またはStringを使用してClobをInputStreamまたはReaderとして読み取ります。Clob.getAsciiStream()Clob.getCharacterStream()

Clobの文字数が2147483647(別名)未満の場合は、Integer.MAX_VALUEこれを実行できます

Clob clob = ... //Your clob
String clobString = clob.getSubString(0, clob.length());
于 2012-08-14T02:29:33.233 に答える
3

"Clob.getSubString(long, int)" を使用する Dev (上記参照) のソリューションは、多くのメモリを消費します。私は次の解決策を好みます。

private static String getAsString(Clob clob) {
    Reader reader = null;
    BufferedReader bufferedReader = null;
    try {
        reader = clob.getCharacterStream();
        bufferedReader = new BufferedReader(reader);
        return IOUtils.toString(bufferedReader);

    } catch (Exception e) {
        throw new RuntimeException("Error while reading String from CLOB", e);
    } finally {
        IOUtils.closeQuietly(reader);
        IOUtils.closeQuietly(bufferedReader);
    }
}
于 2016-10-20T12:14:56.640 に答える
0

これはうまくいくかもしれません

new BufferedReader(new InputStreamReader(catImage.getAsciiStream())).readLine()
于 2015-08-10T07:36:15.553 に答える