JOOQ创建表并插入值DSLContext

时间:2016-03-18 22:21:24

标签: java sql jooq

我正在尝试使用Database

生成JOOQ

我用这段代码创建一个表:

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>

我认为在创建表时可能会有return type,但我没有找到它。谷歌没有帮助,因为Table不是最好的搜索词; - )

问题:我怎样才能找到Table的实例 - 我的名字是String

1 个答案:

答案 0 :(得分:2)

您始终可以通过DSL.table(String)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)的使用。

普通SQLName参考

值得一提的是,在运行时使用纯SQL字符串(如DSL.table(String))或名称引用(如DSL.table(Name)中)创建动态表/字段对象之间的区别。基本上:

  • 纯SQL字符串不区分大小写,并受SQL注入
  • 默认情况下,名称引用区分大小写

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