2

我有一个带有 CLOB 列的 HSQL 表。我使用 HSQL 2.2.8 作为测试用例的内存数据库。我试图从文本文件中插入一个 41.169 字节的数据条目,但我总是收到一个异常,告诉我“字符串数据,右截断”,我认为该条目太大而无法插入,因此被截断。所以我尝试插入较小的数据条目,效果很好,但最后我真的需要能够插入大条目。

该表是使用以下 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 回答