使用setString()从String转换为Clob不起作用

时间:2013-09-22 08:41:20

标签: java jdbc derby clob

我正在尝试将String转换为Clob以存储在数据库中。我有以下代码:

Clob clob = connection.createClob();
System.out.println("clob before setting: " + clob);
clob.setString(1,"Test string" );
System.out.println("clob after setting: " + clob);
System.out.println("clob back to string: " + clob.toString());

当我运行它时,没有设置Clob,输出如下:

clob before setting: org.apache.derby.impl.jdbc.EmbedClob@1f5483e
clob after setting: org.apache.derby.impl.jdbc.EmbedClob@1f5483e
clob back to string: org.apache.derby.impl.jdbc.EmbedClob@1f5483e

我看到的任何地方都说使用了setString方法,我不知道为什么这对我不起作用。

3 个答案:

答案 0 :(得分:8)

您不需要中间Clob个实例,只需在setString()上使用PreparedStatement

PreparedStatement stmt = connection.prepareStatement("insert into clob_table (id, clob_column) values (?,?)";
stmt.setInt(1, 42);
stmt.setString(2, "This is the CLOB");
stmt.executeUpdate();
connection.commit();

答案 1 :(得分:2)

不确定它是否适用于德比,但对于休眠,您可以使用:

public Clob createClob(org.hibernate.Session s, String text) {
    return s.getLobHelper().createClob(text);
}

答案 2 :(得分:2)

您从System.out.println语句中读取的内容并不表示Clob中实际发生的情况。您只是在读取Clob的默认java.lang.Object.toString()方法,在这种情况下,该方法将输出实例ID,无论您放置什么内容,该方法都不会改变。

您正在正确使用Clob将String加载到其上,但没有读回String值。要从Clob读取String值,请使用...

Clob clob = connection.createClob();
clob.setString(1,"Test string" );
String clobString = clob.getSubString(1, clob.length())
System.out.println(clobString);

顺便说一句:如果您使用的是大字符串,那么您确实想将您的字符串转换为Clob,如果该字符串大于Oracle varchar2限制,并且您发送了一个简单的字符串,它可能会截断输入或引爆。如果Oracle proc需要Clob,请给它一个。