2

CLOB列を持つHSQLテーブルがあります。テストケースのインメモリデータベースとしてHSQL2.2.8を使用しています。テキストファイルから41.169バイトのデータのエントリを1つ挿入しようとしていますが、「文字列データ、正しい切り捨て」という例外が常に発生します。この例外から、エントリが大きすぎて挿入できず、切り捨てられたと見なされます。そのため、完全に正常に機能する小さなデータエントリを挿入しようとしましたが、最終的には、大きなエントリも挿入できる必要があります。

テーブルは、次のSQLコマンドを使用して作成されます。

CREATE TABLE documents (
identifier VARCHAR(255) NOT NULL,
documentdata CLOB,
PRIMARY KEY(identifier)
);

次のSQLコマンドを使用してデータを挿入しようとしています。

MERGE INTO documents 
USING (VALUES(:identifier,:documentdata)) 
AS vals(identifier,documentdata) 
ON documents.identifier=vals.identifier 
WHEN NOT MATCHED THEN INSERT VALUES vals.identifier, vals.documentdata;

このクエリでは、:identifierと:documentdataが対応する値に置き換えられます。

だから私の質問はです。どこかで構成する可能性のあるHSQLのCLOBエントリのサイズに制限はありますか?CLOBを使用すると任意のサイズのデータ​​エントリを保存できると思ったため、エラーを理解できません。

4

1 に答える 1

1

これは、大きなCLOBまたはBLOB列を持つテーブルに挿入する正しい方法ではありません。次のステートメントをPreparedStatementで使用してから、CLOBを文字ストリームまたは文字列として設定します。

MERGE INTO documents 
USING (VALUES(CAST(? AS VARCHAR(255)),CAST(? AS CLOB)))
AS vals(identifier,documentdata) 
ON documents.identifier=vals.identifier 
WHEN NOT MATCHED THEN INSERT VALUES vals.identifier, vals.documentdata;
于 2012-06-23T19:41:02.740 に答える