Java &引用;SQLException:展开错误";使用JDBI和PGJDBC-NG Postgres驱动程序
我正在使用JDBI连接到我的Postgres数据库。这一直运作良好。今天我决定尝试用驱动程序替换本地Postgres驱动程序。在我尝试第一个简单的查询之前,一切都很好:Java &引用;SQLException:展开错误";使用JDBI和PGJDBC-NG Postgres驱动程序,java,postgresql,jdbc,jdbi,pgjdbc-ng,Java,Postgresql,Jdbc,Jdbi,Pgjdbc Ng,我正在使用JDBI连接到我的Postgres数据库。这一直运作良好。今天我决定尝试用驱动程序替换本地Postgres驱动程序。在我尝试第一个简单的查询之前,一切都很好: jdbi.useExtension(FooDao.class, dao -> { dao.insert(e); }); 不幸的是,这导致: org.jdbi.v3.core.ConnectionException:java.sql.SQLException:展开错误 调试到应用程序中我发现异常发生在JDBI的Po
jdbi.useExtension(FooDao.class, dao -> {
dao.insert(e);
});
不幸的是,这导致:
org.jdbi.v3.core.ConnectionException:java.sql.SQLException:展开错误
调试到应用程序中我发现异常发生在JDBI的PostgresPlugin
类的customizeHandle
方法中:
@Override
public Handle customizeHandle(Handle handle) {
PGConnection pgConnection = Unchecked.supplier(() -> handle.getConnection().unwrap(PGConnection.class)).get();
return handle.configure(PostgresTypes.class, pt -> pt.addTypesToConnection(pgConnection));
}
异常在unwrap
方法的第一行抛出。问题似乎在于,对于新的驱动程序,getConnection
返回的实例是不可从PGConnection
分配的,正如unwrap方法调用指定的那样
这有什么办法吗?我想我可以扩展PostgresPlugin
并覆盖customizeHandle
的实现,以便使用PGDirectConnection
打开包,但如果可能的话,我宁愿不这样做
Edit:呃,无法覆盖
customizeHandle
,因为postgrespes.addTypesToConnection
不是公共的。PostgresPlugin
JDBI直接查询PGConnection
;这是一个仅在标准驱动程序中可用的类。因此,在它被改变为与NG一起工作之前,它不会
虽然,根据文件
该插件为Java 8 Java.time类型配置映射,如Instant或Duration、InetAddress、UUID、类型化枚举和hstore
但是这些都不是必需的,因为PGJDBC-NG
本机支持所有这些类型
解决方案
不要使用PostgresPlugin