运行时 SQL 查询生成器

2024-05-05

我的问题类似于

Java中有什么好的动态SQL生成器库吗? https://stackoverflow.com/questions/5620985/is-there-any-good-dynamic-sql-builder-library-in-java

然而,从上述线程中得出的一个重要观点是:

Querydsl 和 jOOQ 似乎是最流行和最成熟的选择,但有一点需要注意:两者都依赖于代码生成的概念,其中为数据库表和字段生成元类。这有助于实现漂亮、干净的 DSL,但它尝试为仅在运行时已知的数据库创建查询时面临问题.

除了使用普通 JDBC + 字符串连接之外,还有什么方法可以在运行时创建查询吗?

我正在寻找一个可用于构建表单来查询现有数据库的 Web 应用程序。现在,如果类似的东西已经存在,那么指向此类产品的链接也将受到欢迎。


虽然数据库元数据的源代码生成确实为使用增加了很多价值jOOQ http://www.jooq.org,这不是先决条件。许多 jOOQ 用户将 jOOQ 用于您设想的相同用例。这也体现在jOOQ教程 http://www.jooq.org/doc/latest/manual/getting-started/use-cases/jooq-as-a-standalone-sql-builder/,其中将使用 jOOQ 而不生成代码列为完全有效的用例。例如:

String sql = create.select(
                        fieldByName("BOOK","TITLE"), 
                        fieldByName("AUTHOR","FIRST_NAME"), 
                        fieldByName("AUTHOR","LAST_NAME"))
                   .from(tableByName("BOOK"))
                   .join(tableByName("AUTHOR"))
                   .on(fieldByName("BOOK", "AUTHOR_ID").eq(
                        fieldByName("AUTHOR", "ID")))
                   .where(fieldByName("BOOK", "PUBLISHED_IN").eq(1948))
                   .getSQL();

以类似的方式,可以使用以下命令从任何查询中提取绑定值查询.getBindValues() http://www.jooq.org/javadoc/latest/org/jooq/Query.html#getBindValues%28%29.

这种方法仍然会击败动态 SQL 语句的普通 JDBC + 字符串连接,因为您无需担心:

  • 语法正确性
  • 跨数据库兼容性
  • SQL注入
  • 绑定变量索引

(免责声明:我为 jOOQ 的供应商工作)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运行时 SQL 查询生成器 的相关文章

随机推荐

  • 在 R 中不循环地对连续的列表元素对应用函数

    我试图找到一种有效的 即避免使用循环 方法来应用一个函数 该函数迭代地将列表的当前和前一个 或下一个 元素作为参数 并返回结果列表 其长度必然是短 1 个元素 作为一个具体的例子 我有一个在某些图中定义路径的顶点列表 vlist lt c
  • Flex - 自动调整数据网格大小的问题

    我正在尝试创建一个数据网格 它将垂直调整大小以确保所有渲染器完整显示 此外 渲染器的高度可变 渲染器可以自行调整大小 一般来说 事件的流程如下 项目渲染器之一会自行调整大小 通常响应用户单击等 它调度父数据网格拾取的冒泡事件 DataGri
  • 如何在 Angular 2 中封装动态添加的元素?

    尝试让 MDL 与 Angular2 一起工作 通过 Shadow DOM 模拟 Angular 封装了从代码中获得的所有 CSS 和 html 但是当我使用componentHandler upgradeElement 它创建没有封装的新
  • 在二进制 R 包中包含测试

    我在用testthat为我的 R 包编写单元测试 我见过一些软件包作者 比如来自Rcpp and ggplot2 使用二进制文件分发单元测试 但是 当我使用 RStudio 0 98 1102 构建包时devtools 1 7 0 test
  • 从 Spring 4.1.6 升级到 4.2.4 突然出现 TransactionRequiredException

    我已经从 4 1 6 Release 升级到最新的 Spring 版本到 4 2 4 Release 突然之间 之前运行顺利的所有功能现在抛出以下异常 javax persistence TransactionRequiredExcepti
  • MongoDB - 手册参考示例

    我正在读手册参考 http docs mongodb org manual reference database references document referencesMongoDB 数据库参考文档的一部分 但我不太理解 解析引用字段
  • 调整浏览器大小时CSS边框影响宽度

    我使用以下方法制作了两个简单的导航菜单ul and li 一种是无边框的 另一种是有边框的 两个菜单的宽度固定为 400px 在第一个菜单中我给了每个li固定宽度为 100px 在第二个菜单中 根据宽度计算 我给出了固定宽度 98px 左右
  • PHP - 多个不同的数据库依赖注入类

    我花了过去几个小时试图找到 最佳 最合乎逻辑的方法的答案 以编写一个 php 数据库类以同时连接到一个 postgresql 数据库和一个 mysql 数据库 另外 我想采用依赖注入设计 但对整个概念还是陌生的 到目前为止我已经想出了 cl
  • 为什么我的 CSS3 媒体查询无法在移动设备上运行?

    在 styles css 中 我使用媒体查询 两者都使用以下变体 Normal CSS styles media only screen and max width 767px Mobile styles go here 当我缩小窗口时 网
  • React - 如何获取组件子元素的大小并重新定位它们

    我有一个组件 它在动态网格中排列元素 如下所示 class GridComponent extends React Component render return div items map function item return div
  • 使用列值作为 Spark DataFrame 函数的参数

    考虑以下数据框 letter rpt X 3 Y 1 Z 2 可以使用以下代码创建 df spark createDataFrame X 3 Y 1 Z 2 letter rpt 假设我想重复每行列中指定的次数rpt 就像这样questio
  • 使用 -static-libgcc -static-libstdc++ 编译仍然会导致对 libc.so 的动态依赖

    我正在尝试制作一个尽可能可移植的可执行文件 删除一些依赖项后 我在另一个系统上运行二进制文件时遇到以下问题 lib x86 64 linux gnu libm so 6 version GLIBC 2 15 not found requir
  • 通过 XMLHTTPRequest 发布时无法设置自定义编码

    从上个版本的chrome浏览器的JS控制台来看 x new XMLHttpRequest x open POST a 2 x setRequestHeader Content Type application x www form urle
  • 从条件映射类型中排除“{}”

    我们在以下界面上工作 interface A a string b string c number d number 我们有一个类型可以让每个键都在T optional如果他们的类型是string and required如果是number
  • WebMatrix sql LIKE %

    我在执行以下查询时遇到问题 当我使用静态参数直接从 WebMatrix 执行它并返回几行时 它可以工作 但不能从我的 cshtml 页面执行 var accounts database Query SELECT Username Email
  • 通过 const 成员的引用传递时尝试引用已删除的函数

    我显然错过了一些东西 如果我有 class MyClass public const int something MyClass int Something something something 这将失败 尝试引用已删除的函数 因为我没有
  • 如何启动 VBS 的交互式控制台?

    与这个问题非常相似 如何启动 Perl 的交互式控制台 https stackoverflow com questions 73667 how can i start an interactive console for perl 我只是希
  • 如何使用正则表达式替换匹配的组值

    我想修改连接字符串中 数据源 组件的值 我正在考虑以下解决方案 使用这个正则表达式模式 data source w 1 w 我可以获得以下字符串匹配 Match Groups 0 Value data source MY PC SQLEXP
  • GCD获取队列名称/标签

    如何获取当前队列名称 我的意思是队列标签com example myqueue 在 Xcode 4 调试器中我只能看到 block invoke 1 怎么样dispatch queue get label http developer ap
  • 运行时 SQL 查询生成器

    我的问题类似于 Java中有什么好的动态SQL生成器库吗 https stackoverflow com questions 5620985 is there any good dynamic sql builder library in