将 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 驱动程序一起使用的主要内容,如果未能解决你的问题,请参考以下文章
使用 neo4j jdbc 驱动程序和 neo4j 4 准备好的语句中的密码查询参数的语法是啥?