7

我正在尝试将 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 方法,我不知道为什么这对我不起作用。

4

3 回答 3

9

您不需要中间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();
于 2013-09-22T08:55:07.740 回答
2

不确定它是否适用于 derby,但对于 hibernate,您可以使用:

public Clob createClob(org.hibernate.Session s, String text) {
    return s.getLobHelper().createClob(text);
}
于 2013-11-05T18:19:59.613 回答
2

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

您正在正确使用 Clob 将字符串加载到它上面,但没有读回字符串值。要从 clob 中读取字符串值,请使用...

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,给它一个。

于 2018-11-16T13:59:13.633 回答