我正在使用 JDBI 连接到我的 Postgres 数据库。这一直运作良好。今天我决定尝试用PGJDBC-NG驱动替换原生的 Postgres驱动。一切都很好,直到我尝试我的第一个简单查询:
jdbi.useExtension(FooDao.class, dao -> {
dao.insert(e);
});
不幸的是,这导致:
org.jdbi.v3.core.ConnectionException:java.sql.SQLException:解包错误
调试到应用程序我发现异常发生在customizeHandle
JDBIPostgresPlugin
类的方法中:
@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
返回的实例PGDirectConnection
不能从 指定PGConnection
,正如 unwrap 方法调用所指定的那样。
有解决办法吗?我想我可以扩展PostgresPlugin
和覆盖customizeHandle
to unwrap using的实现,PGDirectConnection
但如果可能的话,我不希望这样做。
编辑:呃,不能覆盖customizeHandle
,因为PostgresTypes.addTypesToConnection
不是公开的。