使用 setString() 从 String 转换为 Clob 不起作用
Posted
技术标签:
【中文标题】使用 setString() 从 String 转换为 Clob 不起作用【英文标题】:Converting from String to Clob using setString() not working 【发布时间】:2013-09-27 07:50:41 【问题描述】:我正在尝试将 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 方法,我不知道为什么这对我不起作用。
【问题讨论】:
您可以在PreparedStatement
上简单地使用setString()
。无需创建中间 Clob
实例。
@BugalugsNash:您错误地假设 Clob.toString() 返回 Clob 内容。事实并非如此。因此,您的调试输出无助于诊断问题。而且我不确定您是否有任何问题。
@a_horse_with_no_name 我正在尝试将一行插入到具有 Clob 作为数据类型的表中,因此我正在使用带有变量“?”的准备好的语句,然后尝试绑定Clob 到那个变量。我不明白你的建议,但我认为它不适用于我。
@Codo 如何访问 clob 内容? toString() 方法是谷歌建议的,它返回一个字符串,所以我看不到问题
正如我所说:没有必要使用Clob
实例。 setString()
直接 就可以了。看我的回答。
【参考方案1】:
您不需要中间的Clob
实例,只需在PreparedStatement
上使用setString()
:
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();
【讨论】:
【参考方案2】:不确定它是否适用于 derby,但对于 hibernate,您可以使用:
public Clob createClob(org.hibernate.Session s, String text)
return s.getLobHelper().createClob(text);
【讨论】:
【参考方案3】:您从 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,给它一个。
【讨论】:
以上是关于使用 setString() 从 String 转换为 Clob 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
尝试从 sharedPreferences 检索地图时出现颤振错误
如果包含空格的参数连接,但不使用 setString,则获取 resultSet