Insert's DSL API.
Example:
DSLContext create = DSL.using(configuration);
TableRecord<?> record =
create.insertInto(table, field1, field2)
.values(value1, value2)
.returning(field1)
.fetchOne();
This implemented differently for every dialect:
SELECT … FROM FINAL TABLE (INSERT …)@@identity or last_inserted_rowid() values. Those
values are fetched in a separate SELECT statement. If other
fields are requested, another statement is issued. Client code must assure
transactional integrity between these statements.
XYZ*Step types directly from client code
It is usually not recommended to reference any XYZ*Step types
directly from client code, or assign them to local variables. When writing
dynamic SQL, creating a statement's components dynamically, and passing them
to the DSL API statically is usually a better choice. See the manual's
section about dynamic SQL for details: https://www.jooq.org/doc/latest/manual/sql-building/dynamic-sql.
Drawbacks of referencing the XYZ*Step types directly: