使用postgreSQL将字符串转换为CLOB

10

我正在尝试从PostgreSQL数据库中读取一个clob,对其进行更改,并将其写回。

我使用以下代码成功地读取了clob:

PreparedStatement statement = connection.prepareStatement("SELECT clob_column from data where id = 1");
ResultSet executeQuery = statement.executeQuery();
executeQuery.next()
Clob fetchedClob = executeQuery.getClob("clob_column");

但是当我尝试使用以下代码创建一个新的 CLOB 并添加新数据时:

Clob newClob = connection.createClob();

我遇到了以下错误:

java.lang.AbstractMethodError: com.mchange.v2.c3p0.impl.NewProxyConnection.createClob()Ljava/sql/Clob;  

此外,如果我尝试仅编辑提取的 CLOB,使用:

fetchedClob.setString(0, "new string");

我遇到了以下错误:

Method org.postgresql.jdbc4.Jdbc4Clob.setString(long,str) is not yet implemented.

有任何想法吗?

更新:以下是表定义

CREATE TABLE data ( id bigint NOT NULL, clob_column text, );

谢谢

1个回答

8
不需要使用getClob()方法。在text列上,ResultSet.getString()和setString()完全正常工作(因为PostgreSQL没有clob数据类型,所以我假设您正在使用text)。

我正在使用文本。 当我尝试使用getString时,我得到了一个数字,我不明白它的含义(也许是实际数据长度?)。 只有当我执行getClob并查看其字符流(getCharacterStream)时,我才能获得保存在数据库中的完整XML。 - Ben Bracha
@BenBracha:那你没有把所有东西都展示给我们。getString()text列上绝对可以正常工作。请展示一下你的表定义(编辑你的问题)。 - user330315
以上已更新。我现在也发现,我的应用程序使用的org.postgresql.jdbc3.AbstractJdbc3Clob并没有实现所有的Clob set*方法。我该怎么办?另外,我应该补充说明我们使用Hibernate,并且与此表匹配的实体将其column_text字段标记为@Lob。 - Ben Bracha
@BenBracha:我不会使用Hibernate。但是,如果您在使用getString()时没有获得正确的值,那么您的程序可能存在问题。JDBC驱动程序可以正常工作(您正在使用当前版本,对吗?) - user330315
@a_horse_with_no_name Postgres现在确实有Clob数据类型。 - Tino M Thomas
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接