java - 使用 JDBI 和 PGJDBC-NG Postgres 驱动程序的“SQLException:解包错误”
问题描述
我正在使用 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
不是公开的。
解决方案
JDBI直接PostgresPlugin
查询PGConnection
;这是仅在标准驱动程序中可用的类。因此,除非将其更改为与 NG 一起使用,否则它不会。
虽然,根据文档...
该插件为 Java 8 java.time 类型(如 Instant 或 Duration、InetAddress、UUID、类型化枚举和 hstore)配置映射。
但这些都不是必需的,因为PGJDBC-NG
本机支持所有这些类型!
解决方案
不要使用PostgresPlugin
推荐阅读
- scala - Gatling 评估表达式语言
- javascript - 如何从已安装的 PWA 和 TWA 中删除 div?
- azure - Azure 容器实例无法访问 docker 镜像
- vba - 查找之前对话中的电子邮件存储在共享收件箱中的位置
- python - Pygame中与移动平台碰撞的问题
- python-3.x - selenium python中的睡眠时间如何随机?
- python - 无法使用视图名称“用户详细信息”解析超链接关系的 URL
- security - 在 Falco 上设置的卷安装
- javascript - 水平滚动上的CSS“位置:粘性”
- ios - Xcode 不断地对自己进行索引,并且编写代码的颜色很晚才改变