小编典典

运行时SQL查询生成器

sql

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

Querydsl和jOOQ似乎是最流行和最成熟的选择,但是需要注意的一件事: 两者都依赖于代码生成的概念,
即为数据库表和字段生成元类。这有助于建立一个漂亮,干净的DSL,但是 在尝试为仅在运行时才知道的数据库创建查询时会遇到问题

除了仅使用纯JDBC +字符串串联外,还有什么方法可以在运行时创建查询吗?

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


阅读 476

收藏
2021-04-22

共1个答案

小编典典

尽管生成数据库元数据的源代码无疑为使用jOOQ增添了很多价值,但这不是前提条件。许多jOOQ用户将jOOQ用于您设想的相同用例。jOOQ教程中也反映了这一点,该教程将使用没有代码生成的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();

以类似的方式,可以使用Query.getBindValues()从任何查询中提取绑定值。

对于动态SQL语句,这种方法仍将优于普通的JDBC +字符串连接,因为您无需担心:

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

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

2021-04-22