如何使用Java / JDBC在Oracle数据库中存储长度超过4000个字符的字符串?
我不确定如何使用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的解决方案,我也会对此持开放态度,但它必须是一列。
你有(至少)两个选择:
-
使用
connection.createClob()
创建一个Clob
,在其上设置数据,并在准备好的语句中设置它。 这适用于较小的数据 -
使用
preparedStatement.setClob(position, reader)
– 这里你将有一个Reader
实例。
以下是oracle.com上使用LOB列与Oracle和JDBC的示例 。 基本上,它为空LOB插入一个LOB定位器(实际上是两个,因为它演示了BLOB和CLOB),锁定行进行更新,然后使用BLOB和CLOB OutputStream接口将数据写入LOB。 当释放“SELECT … FOR UPDATE”时,将在数据库中刷新LOB,并且新显示的数据将可见。
有几种方法可以参见Java数据库连接(JDBC) – 将String转换为CLOB并插入Oracle数据库
此外,下面的解决方案解释了如何使用PL / SQL处理此问题
参考: http : //gogates.blogspot.com/2013/09/inserting-clob-data-which-is-more-than.html
将超过4000个字符的CLOB数据插入Oracle表我试图将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 := ''; INSERT INTO ClobTest VALUES(1, vClob); END;
validation是否真的将4000多个字符插入到查询下面执行的目标中
SELECT LENGHT(clobData) FROM ClobTest
我希望有所帮助