【发布时间】:2019-10-28 12:05:50
【问题描述】:
我正在使用 JDBI 连接到我的 Postgres 数据库。这一直运作良好。今天我决定尝试用PGJDBC-NG驱动替换原生的Postgres驱动。一切都很好,直到我尝试我的第一个简单查询:
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 返回了一个 PGDirectConnection 的实例,正如 unwrap 方法调用所指定的那样,它不能从 PGConnection 分配。
有解决办法吗?我想我可以扩展 PostgresPlugin 并覆盖 customizeHandle 的实现以使用 PGDirectConnection 展开,但如果可能的话我不想这样做。
编辑:呃,不能覆盖customizeHandle,因为PostgresTypes.addTypesToConnection 不公开。
【问题讨论】:
标签: java postgresql jdbc jdbi pgjdbc-ng