如何使用JOOQ检查查询是否有效?

问题描述 投票:0回答:1

我在 Java 应用程序的持久层中使用 Framework Jooq,我希望允许在特定上下文中通过 plain SQL API 创建特定选择查询的部分条件。组成普通 SQL 部分的字符串将在运行时的某个点保存,并且查询将在稍后的时间点通过后台作业执行。

有没有一种方法可以验证 Jooq 查询是否可以在不实际执行的情况下无错误地执行?例如,我发现

ctx.explain(query)

我可以使用它作为解决方法,但实际上我不想执行解释。有没有替代方案?

非常感谢。

java jooq
1个回答
0
投票

这里还有一些其他可能就足够的“技巧”:

  • 如果您的查询始终是
    SELECT
    查询,您可以将它们包装在
    SELECT * FROM (...) t WHERE false
    等派生表中。这可能有助于覆盖 95% 的所有语法,并且大多数优化器应该足够聪明,可以避免运行派生表(请检查)。一些注意事项:
    • FOR UPDATE
      子句和其他类似
      SELECT
      功能无法以这种方式工作
    • 派生表不允许多次投影相同的列名
  • 使用 jOOQ 的 SQL 解析器 来解析您的查询。它可以解析很多 SQL,但显然不是所有的 SQL,因此您可能会遇到完美的供应商特定 SQL 的解析器限制
  • 针对实际 RDBMS 中的虚拟架构/数据库运行查询。如果您确定您的纯 SQL 模板不会直接访问您的生产模式,那么在具有相同逻辑模式的同一实例上使用不同的数据库可以帮助验证查询,而不会出现任何性能问题,因为您不会有任何数据.
  • 针对虚拟 RDBMS 实例运行查询,例如从码头运行。您甚至可以使用 testcontainers 即时启动它。无论如何,您可能已经(或很快将拥有)使用测试容器的集成测试设置,因此您可以在某种程度上简单地重复使用它。
© www.soinside.com 2019 - 2024. All rights reserved.