繁体   English   中英

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

[英]How do I store a string longer than 4000 characters in an Oracle Database using Java/JDBC?

我不确定如何使用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 我环顾了一下,但无法按照我发现的任何解释进行操作。

如果您有不使用Clobs的解决方案,那么我也乐于接受,但必须是一栏。

您(至少)有两个选择:

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

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

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

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

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


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

我使用的表结构如下

CREATE TABLE ClobTest (id number, clobData clob );

表结构非常简单,一个数字和一个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 

希望对您有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM