3

我不确定如何使用 Java/JDBC 将很长的字符串插入 Oracle 数据库。

我有一个大于 4000 个字符的字符串,假设它是 6000。我想获取这个字符串并将其存储在 Oracle 数据库中。

这样做的方法似乎是使用 CLOB 数据类型。好的,所以我将该列声明为描述 CLOB。

现在,当需要实际插入数据时,我有一个准备好的语句 pstmt。它看起来像pstmt = conn.prepareStatement(“INSERT INTO Table VALUES(?)”)

所以我想用方法pstmt.setClob()。但是,我不知道如何创建一个包含我的 String 的 Clob 对象;没有构造函数(大概是因为它可能比可用内存大得多)。

如何将我的字符串放入 Clob?

请记住,我不是一个非常有经验的程序员。请尽量使解释尽可能简单。效率、良好实践等在这里不是问题,我只想要绝对最简单的解决方案。如果可能的话,我想避免下载其他软件包;现在我只使用 JDK 1.4 和标记为ojdbc14.jar. 我环顾四周,但我无法遵循我找到的任何解释。

如果您有一个不使用 Clob 的解决方案,我也会对此持开放态度,但它必须是一列。

4

4 回答 4

7

你有(至少)两个选择:

  • 用于connection.createClob()创建一个Clob,在其上设置数据,并将其设置在准备好的语句上。这适用于较小的数据

  • 使用preparedStatement.setClob(position, reader)- 在这里你将有一个Reader实例。

于 2010-05-22T07:58:30.050 回答
2

此外,下面的解决方案解释了如何使用 PL/SQL 来处理这个问题

参考: http: //gogates.blogspot.com/2013/09/inserting-clob-data-which-is-more-than.html


将超过 4000 个字符的 CLOB 数据插入到 Oracle 表中

我使用的表结构如下

CREATE TABLE ClobTest (id number, clobData clob );

表结构非常简单,只有 2 列一个数字和一个 clob 数据类型。

现在......如果你在查询下面运行,它将被执行而没有任何错误

INSERT INTO ClobTest VALUES(1, 'ClobTestData');

但是,当您将数据集的长度增加 4000+ 时,它不会成功。并且会给出如下错误

错误报告:SQL 错误:ORA-01704: string literal too long 01704. 00000 - “string literal too long” *原因:字符串字面量超过 4000 个字符。*操作:使用最多 4000 个字符的字符串文字。更长的值只能使用绑定变量输入。

谷歌搜索这个问题后,才知道,如果你想插入 4000+ char 数据到 CLOB 数据类型,尝试使用 PL-SQL 块来做到这一点。

根本原因是,Oracle SQL 不支持超过 4000 个字符的 char/varchar 数据类型;但是 PL-SQL 会这样做。

我使用匿名 pl-sql 将 4000+ 字符数据插入 CLOB 数据类型

DECLARE

vClob VARCHAR(8000);

BEGIN

vClob := '<Charater data having 4000+ characters>';

INSERT INTO ClobTest VALUES(1, vClob);

END;

验证是否真的有 4000 多个字符被插入到在查询下面执行的目标中

SELECT LENGHT(clobData) FROM ClobTest 

我希望这会有所帮助

于 2018-06-25T12:42:27.810 回答
1

这是oracle.com 上的一个示例,用于将 LOB 列与 Oracle 和 JDBC 结合使用。基本上,它为空 LOB(实际上是两个,因为它同时演示 BLOB 和 CLOB)插入 LOB 定位器,锁定行以进行更新,然后使用 BLOB 和 CLOB OutputStream 接口将数据写入 LOB。当 "SELECT ... FOR UPDATE" 被释放时,数据库中的 LOB 将被刷新,新插入的数据将可见。

于 2010-05-22T08:02:42.663 回答
0

有几种方法请参阅Java 数据库连接 (JDBC) - 将字符串转换为 CLOB 并插入到 Oracle 数据库中

于 2010-05-22T08:04:46.853 回答