Der er to måder at interagere med tabeller/kolonner dynamisk (dvs. uden at bruge kodegeneratoren) i jOOQ:
Ved brug af almindelig SQL (org.jooq.SQL
)
Det er det, du laver. Du kan naturligvis kvalificere kolonnerne direkte i dit almindelige SQL Field
referencer på to måder:
Ved at gentage "tmp"
streng i hvert felt:
Table<Record> TMP = DSL.table("tmp");
Field<String> TYPE = DSL.field("tmp.type", String.class);
Field<String> TOKEN = DSL.field("tmp.token", String.class);
Ved at indlejre "tmp"
reference i den almindelige SQL-skabelon:
Table<Record> TMP = DSL.table("tmp");
Field<String> TYPE = DSL.field("{0}.type", String.class, TMP);
Field<String> TOKEN = DSL.field("{0}.token", String.class, TMP);
Den almindelige SQL-funktionalitet er dokumenteret her i manualen
Brug af kvalificerede referencer (org.jooq.Name
)
Det er nok det, du vil gøre i stedet for. Du skriver:
Table<Record> TMP = DSL.table(DSL.name("tmp"));
Field<String> TYPE = DSL.field(DSL.name("tmp", "type"), String.class);
Field<String> TOKEN = DSL.field(DSL.name("tmp", "token"), String.class);
Navnefunktionaliteten er beskrevet her i manualen .
Fordelene ved denne tilgang er:
- Ingen SQL-injektionsrisiko
- Der er taget hånd om versalfølsomhed
- Tabelkortlægning og andre AST-transformationer vil også fungere