JOOQ 创建 Table 并插入值 DSLContext

JOOQ create Table and insert values DSLContext

我正在尝试使用 JOOQ

生成 Database

我确实使用以下代码创建了一个 Table:

CreateTableAsStep<Record> table = create.createTable("TestTable");
CreateTableColumnStep step = table.column("testColumn", SQLDataType.Integer);
step.execute();

这个很好用,但是在插入数据的时候,我运行遇到了问题 该文档包括以下示例:

create.insertInto(AUTHOR)
      .set(AUTHOR.ID, 100)
      .set(AUTHOR.FIRST_NAME, "Hermann")
      .set(AUTHOR.LAST_NAME, "Hesse")
      .newRecord()
      .set(AUTHOR.ID, 101)
      .set(AUTHOR.FIRST_NAME, "Alfred")
      .set(AUTHOR.LAST_NAME, "Döblin")
      .execute();

这里 AUTHOR 不是简单的 String 它期望 org.jooq.Table<R extends Record>

我以为在创建table的时候可能会有一个return type,但是我没有找到。 Google 没有帮助,因为 Table 不是搜索的最佳词 ;-)

问题:我如何获得 Table 的实例 - 我的名字确实是 String

您始终可以通过 DSL.table(String) or DSL.table(Name) 创建 Table 引用。例如:

// Assuming this:
import static org.jooq.impl.DSL.*;

create.insertInto(table(name("TestTable")))
      .set(field(name("testColumn")), 1)
      .execute();

另请注意我对 DSL.field(Name) 的用法。

普通SQL vs. Name参考文献

值得一读的是在运行时使用纯 SQL 字符串(如 DSL.table(String)) or with name references (as in DSL.table(Name))创建动态 table / 字段对象之间的区别。本质上:

  • 普通 SQL 字符串不区分大小写,并且会受到 SQL 注入
  • 名称引用默认区分大小写

在您的情况下,由于您可能创建了区分大小写的 table/column 名称,因此您应该更喜欢后者。可以在这里找到更多信息: