Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JDBI与不支持预处理语句的JDBC驱动程序一起使用_Java_Jdbc_Amazon Athena_Jdbi_Presto - Fatal编程技术网

Java 将JDBI与不支持预处理语句的JDBC驱动程序一起使用

Java 将JDBI与不支持预处理语句的JDBC驱动程序一起使用,java,jdbc,amazon-athena,jdbi,presto,Java,Jdbc,Amazon Athena,Jdbi,Presto,我试图在Presto/AWS Athena jdbc驱动程序之上使用最新的2.x版本的JDBI,该驱动程序不支持预先准备好的语句 似乎应该有一个配置选项或类似选项,允许您关闭预处理语句的使用,特别是如果您只是在没有参数绑定的情况下传入SQL。但是,StatementBuilder接口需要来自create方法的PreparedStatement返回值 有没有人遇到过这种情况,或者对如何在这种情况下使用JDBI有什么建议?我在其他几个数据库的项目的其余部分都使用它,因此我更愿意保留它以保持一致性。如

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

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


有没有人遇到过这种情况,或者对如何在这种情况下使用JDBI有什么建议?我在其他几个数据库的项目的其余部分都使用它,因此我更愿意保留它以保持一致性。

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

  • JDBI是开源的。修改源以满足您的需要。如果您以一种普遍有用的方式进行更新,您可能希望将更新发回,以便其他人可以从中受益,即成为一名贡献者

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


  • Presto的JDBC驱动程序支持Teradata免费提供的准备好的语句。你可以从他们的网站上下载。雅典娜应该可以使用它,但你必须试试。

    谢谢,我最终选择了#2,我可能会在某个时候在Github上获得此代码,以防其他人想这样做。@RhodesianHunter,你是否每次都将代码发布到Github上?这是很好的建议,谢谢分享!最后,我将接受上述建议,因为如果AWS提供的驱动程序更改了一些重要的内容,我不想在某个时候将所有内容都切换回AWS提供的驱动程序,这也使身份验证更容易(您可以从框中提取权限等)。希望你的建议对其他可能看到这一点的人有所帮助!伟大的对我来说有道理。