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

如何使用Java/JDBC在Oracle数据库中存储长度超过4000个字符的字符串?,java,oracle,jdbc,clob,Java,Oracle,Jdbc,Clob,我不知道如何使用Java/JDBC将很长的字符串插入到Oracle数据库中 我有一个大于4000个字符的字符串,假设它是6000。我想获取这个字符串并将其存储在Oracle数据库中 实现这一点的方法似乎是使用CLOB数据类型。好的,我把这个列声明为description CLOB 现在,当实际插入数据时,我有一个准备好的语句pstmt。它看起来像pstmt=conn.prepareStatement(“插入到表值(?)) 所以我想使用方法pstmt.setClob()。但是,我不知道如何创建包含

我不知道如何使用Java/JDBC将很长的字符串插入到Oracle数据库中

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

实现这一点的方法似乎是使用CLOB数据类型。好的,我把这个列声明为description CLOB

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

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

我如何把我的绳子放进一个Clob

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

如果您有一个不使用CLOB的解决方案,我也愿意,但它必须是一列。

您(至少)有两个选项:

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

  • 使用
    preparedStatement.setClob(位置,读卡器)
    -这里有一个
    reader
    实例


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

有几种方法请参见

此外,下面的解决方案解释了如何使用PL/SQL处理此问题 参考:


将超过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:字符串文字太长 170400000-“字符串文字太长” *原因:字符串文字长度超过4000个字符。 *操作:使用最多4000个字符的字符串文字。 较长的值只能使用绑定变量输入

在谷歌搜索了这个问题之后,我知道,如果您想在CLOB数据类型中插入4000多个字符的数据,请尝试使用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;

我希望这能有所帮助

啊,createClob()正是我想要的。谢谢实际上,我得到了一个错误:线程“main”java.lang.AbstractMethodError中的异常:oracle.jdbc.driver.OracleConnection.createClob()Ljava/sql/Clob;当我运行它时。它来自以下行:Clob description=conn.createClob();这可能意味着你的jdbc驱动程序不是最新的。好吧,数据库是10.1.0.3,我在Oracle的网站上没有看到该版本的jdbc驱动程序下载……我想我的是10.1.0.3,但我不能确定。值得注意的是,我使用的是Class.forName(“oracle.jdbc.driver.OracleDriver”);而不是导入语句。我对这方面不太了解,但似乎它可能是相关的。好吧,我得到了10.1.0.5驱动程序。我决定使用属性类并将“SetBigStringTryClob”设置为“true”,这样我就可以只使用pstmt.setString,而不会因为字符串太长而抱怨。
SELECT LENGHT(clobData) FROM ClobTest