Java Postgres错误方法org.postgresql.jdbc.PgConnection.createClob()未实现

Java Postgres错误方法org.postgresql.jdbc.PgConnection.createClob()未实现,java,postgresql,jdbc,apache-commons-dbcp,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(Dri

当我使用连接对象调用
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)
我将数据库PostgreSQL 9.6.2与JDK8一起使用,并使用commons-dbcp2连接池,并在pom.xml中添加了以下Postgres依赖项

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

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

PostgreSQL实际上没有“CLOB”。只需将
setString(String)
setObject(…)
类型一起使用即可;DR

  • application.yml
    中设置
    spring.jpa.properties.hibernate.jdbc.lob.non_context_creation=true
    ,或者
  • persistence.xml中设置
    hibernate.jdbc.lob.non_context_creation=true
这是JBoss社区中的一个已知错误

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

解决方案

  • 使用更新的向后兼容版本更新postgressql驱动程序
    • application.yml
      中设置
      spring.jpa.properties.hibernate.jdbc.lob.non_context_creation=true
      ,或者
    • 在persistence.xml中设置
      hibernate.jdbc.lob.non_context_creation=true
  • 如果不起作用,请参见下面的技巧:
  • 解决方案是在属性文件中添加这一行(如果您不使用spring,也可以添加类似的内容)

    因此,您的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
    
    参考:


    感谢比纳科特的评论。我已经更新了帖子。

    将其放入应用程序。属性

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

    使用SpringBoot2.1.9.RELEASE,我添加了以下内容,并且工作正常

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

    如果您使用Java配置,请将
    org.hibernate.cfg.AvailableSettings#NON#u context_LOB_CREATION
    添加为JpaPropertyMap的键,并将
    “true”
    作为值。您也可以在
    application.yml
    中设置
    NON#context_CREATION
    (不仅在
    persistence.xml
    中):
    spring.jpa.properties.hibernate.jdbc.lob.non_context_creation=true
    spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
    
    spring:
      jpa:
        properties.hibernate.temp.use_jdbc_metadata_defaults: false
        database-platform: org.hibernate.dialect.PostgreSQL94Dialect