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 名称,因此您应该更喜欢后者。可以在这里找到更多信息:
我正在尝试使用 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 名称,因此您应该更喜欢后者。可以在这里找到更多信息: