我正在尝试使用jOOQ在一些通用代码中构建SQL查询.我对使用jOOQ执行这些查询或检查结果不感兴趣.此外,此代码是通用的,所以我不能使用jOOQ的代码生成.
我已经设法弄清楚这一点:
List<org.jooq.Field<?>> fields = new ArrayList<org.jooq.Field<?>>();
Field<?> field = Factory.field("somefield");
fields.add(field);
field = Factory.field("someotherfield");
fields.add(field);
Field<Object> fieldPK = Factory.field("somePKField");
Condition condition = fieldPK.equal(123);
Factory factory = new Factory(connection, SQLDialect.POSTGRES);
SelectFinalStep step = factory.select(fields).from("sometable").where(condition);
String query = step.getQuery().getSQL(true);
Run Code Online (Sandbox Code Playgroud)
但是Factory.field()和from()采用通用SQL而不是实际的表或字段名称,因此没有引用(即使使用RenderNameStyle.QUOTED)并且没有针对SQL注入的保护.
有没有办法创建一个知道他们名字是什么的字段或表?理想情况下,我可以通过其名称和父表指定一个字段,jOOQ为我构建"sometable"."somefield"字符串.
Luk*_*der 15
jOOQ知道org.jooq.Name模型标识符的类型.它可以使用DSL.name(String...)String形式的完全限定名称构造,例如:
Name name1 = name("column");
Name name2 = name("table", "column");
Name name3 = name("schema", "table", "column");
Name name4 = name("catalog", "schema", "table", "column");
Run Code Online (Sandbox Code Playgroud)
然后,您可以将此名称传递给DSL.field(Name)构造函数,例如:
Field<Object> field1 = field(name("table", "column"));
Field<String> field2 = field(name("table", "column"), String.class);
Run Code Online (Sandbox Code Playgroud)
旁注:问题是在jOOQ 2.x的背景下提出的,但很少有人仍在使用这个旧版本,这就是为什么这个答案假定使用jOOQ 3.x
| 归档时间: |
|
| 查看次数: |
6867 次 |
| 最近记录: |