将 JDBI 与不支持预准备语句的 JDBC 驱动程序一起使用

Posted

技术标签:

【中文标题】将 JDBI 与不支持预准备语句的 JDBC 驱动程序一起使用【英文标题】:Using JDBI with a JDBC driver that does not support prepared statements 【发布时间】:2018-03-14 21:20:26 【问题描述】:

我正在尝试在不支持预准备语句的 Presto/AWS Athena jdbc 驱动程序之上使用最新的 2.x 版本的 JDBI。

似乎应该有一个配置选项或类似的选项,可以让您关闭预准备语句的使用,特别是如果您只是传入没有参数绑定的 SQL。但是,StatementBuilder 接口需要来自 create 方法的 PreparedStatement 返回值。

有没有人遇到过这种情况或对在这种情况下如何使用 JDBI 有一些建议?我在项目的其余部分中将它用于其他几个数据库,因此希望保持它的一致性。

【问题讨论】:

【参考方案1】:

如果您必须将 JDBI 与不支持 PreparedStatement 的 JDBC 驱动程序一起使用,您有两种选择:

    JDBI 是开源的。修改源以满足您的需要。如果您以通常有用的方式进行操作,您可能希望将更新发布回来,以便其他人可以从中受益,即成为贡献者

    假的。围绕来自 Presto/AWS Athena 的 JDBC 连接创建一个 JDBC 包装器,它返回一个假的 PreparedStatement,仅支持无参数 SQL 语句,即如果调用任何 setXxx 方法,则抛出 UnsupportedOperationException。然后将包装好的连接提供给 JDBI。

【讨论】:

谢谢,我最终选择了#2,我可能会在某个时候在 Github 上获取此代码,以防其他人想要这样做。 @RhodesianHunter,您是否每次都将代码发布到 Github?【参考方案2】:

Presto 的 JDBC 驱动程序支持 Teradata 免费提供的 Prepared Statements。你可以从他们的网站下载。它应该适用于 Athena,但您必须尝试一下。

【讨论】:

这是一个很好的建议,感谢分享!我最终会接受上述建议的建议,因为我不想在某些时候将所有内容切换回 AWS 提供的驱动程序,如果它们更改了重要的东西,它也使身份验证更容易(你可以拉进来来自盒子等的权限)。希望您的建议对可能看到此内容的其他人有所帮助! 太棒了!对我来说很有意义。

以上是关于将 JDBI 与不支持预准备语句的 JDBC 驱动程序一起使用的主要内容,如果未能解决你的问题,请参考以下文章

JDBC驱动程序为准备好的语句转义参数?

关于JDBC预处理功能PreparedStatement

使用 neo4j jdbc 驱动程序和 neo4j 4 准备好的语句中的密码查询参数的语法是啥?

是否有任何 RDBMS 提供预准备语句的功能?

mssql-jdbc MS SQL Server JDBC 驱动程序准备好的语句缓存性能问题与 Hikari CP

SQLITE JDBC 驱动程序准备好的语句失败(内部指针 0)