Postgres Error方法org.postgresql.jdbc.PgConnection.createClob()未实现

时间:2017-05-11 01:38:54

标签: java postgresql jdbc apache-commons-dbcp

当我使用连接对象调用createClob方法时,如下所示

Clob clob = con.createClob();

抛出异常。

Caused by: java.sql.SQLFeatureNotSupportedException: Method org.postgresql.jdbc.PgConnection.createClob() is not yet implemented.
        at org.postgresql.Driver.notImplemented(Driver.java:659)
        at org.postgresql.jdbc.PgConnection.createClob(PgConnection.java:1246)
        at org.apache.commons.dbcp2.DelegatingConnection.createClob(DelegatingConnection.java:868)
        at org.apache.commons.dbcp2.DelegatingConnection.createClob(DelegatingConnection.java:868)

我正在使用带有JDK8的数据库PostgreSQL 9.6.2并使用commons-dbcp2连接池,并在pom.xml中添加了以下Postgres依赖项

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.1.1</version>
</dependency>

在类org.postgresql.jdbc.PgConnection中,createClob实现如下所示,它抛出异常。

 @Override
  public Clob createClob() throws SQLException {
    checkClosed();
    throw org.postgresql.Driver.notImplemented(this.getClass(), "createClob()");
  }

解决此问题的解决方案或解决方法是什么?或者我们如何在Postgres查询中设置CLOB数据?

4 个答案:

答案 0 :(得分:18)

<强> TL; DR

  • spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
  • 中设置application.yml
  • hibernate.jdbc.lob.non_contextual_creation=true
  • 中设置persistence.xml

这是JBoss社区中的一个已知错误。

此错误出现在以前版本和新版本的Spring-Boot 2.0.0.RC1以及更高版本中。

<强>解决方案

  1. 使用较新的向后兼容版本更新postgressql-driver。
    • spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
    • 中设置application.yml
    • 在persistence.xml中设置hibernate.jdbc.lob.non_contextual_creation=true
  2. 如果它不起作用,请参阅下面的这个技巧:
  3. 解决方法是在您的属性文件中添加此行(如果您不使用spring,则添加类似的内容)

    spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults= false
    

    因此,您的application.yml应如下所示:

    spring:
        application:
          name: employee-service
    
        datasource:
          url: jdbc:postgresql://localhost:5432/db_development
          platform: POSTGRESQL
          username: ...
          password: ...
    
        jpa:
          hibernate:
            ddl-auto: create-drop
            dialect: org.hibernate.dialect.PostgreSQL9Dialect
            show_sql: true
          properties.hibernate.temp.use_jdbc_metadata_defaults: false
    
    
    server:
      port: 8080
    

    参考:

    https://o7planning.org/en/11661/spring-boot-jpa-and-spring-transaction-tutorial

    hibernate with c3p0: createClob() is not yet implemented

    感谢 Binakot 对他的评论。我已经更新了帖子。

答案 1 :(得分:2)

将其放入 application.properties

spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true

答案 2 :(得分:0)

PostgreSQL确实没有&#34; CLOB&#34;。只需将setString(String)setObject(...)Types.STRING一起使用。

答案 3 :(得分:0)

使用spring-boot 2.1.9.RELEASE,我添加了以下内容,并且有效

spring:
  jpa:
    properties.hibernate.temp.use_jdbc_metadata_defaults: false
    database-platform: org.hibernate.dialect.PostgreSQL94Dialect