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

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

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

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

【问题讨论】:

    标签: java jdbc amazon-athena jdbi presto


    【解决方案1】:

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

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

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

    【讨论】:

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

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

    【讨论】:

    • 这是一个很好的建议,感谢分享!我最终会接受上述建议的建议,因为我不想在某些时候将所有内容切换回 AWS 提供的驱动程序,如果它们更改了重要的东西,它也使身份验证更容易(你可以拉进来来自盒子等的权限)。希望您的建议对可能看到此内容的其他人有所帮助!
    • 太棒了!对我来说很有意义。
    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2014-04-25
    • 2011-11-03
    • 2011-05-16
    • 2011-02-11
    • 2013-07-10
    • 2018-11-12
    相关资源
    最近更新 更多