如何使用Java / JDBC在Oracle数据库中存储长度超过4000个字符的字符串?

时间:2010-05-22 07:54:05

标签: java oracle jdbc clob

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

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

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

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

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

如何将我的String放入Clob?

请记住,我不是一个非常有经验的程序员;请尽量保持解释尽可能简单。效率,良好实践等不是这里的关注点,我只想要绝对最简单的解决方案。如果可能的话,我想避免下载其他软件包;现在我只使用JDK 1.4和标记为ojdbc14.jar的内容。我看了一下,但我没能按照我发现的任何解释。

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

4 个答案:

答案 0 :(得分:7)

你有(至少)两个选择:

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

  • 使用preparedStatement.setClob(position, reader) - 此处您将拥有Reader个实例。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

此外,以下解决方案说明了如何使用PL / SQL处理此问题

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


将超过4000个字符的CLOB数据插入Oracle Table 我试图将4000多个字符的数据插入到具有CLOB作为数据类型的Oracle表中,但是无法做到这一点..使用简单的插入语句

我使用的表结构如下

CREATE TABLE ClobTest (id number, clobData clob );

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

现在...如果您在以下查询中运行,它将在没有任何错误的情况下执行

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

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

  

错误报告:   SQL错误:ORA-01704:字符串文字太长   01704。00000-“字符串文字太长”   *原因:字符串文字长于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 

我希望对您有帮助

答案 3 :(得分:0)