jOOQ从Result <r>获取表名

时间:2017-05-08 18:17:46

标签: java mysql jooq

我试图从jOOQ 结果中检索基础MySQL表名。

这是我最好的尝试,作为辅助功能:

private <R extends Record> String tableNameOf(Result<R> result) {
  return result.recordType().toString();
}

这会返回"database"."table_name"."first_column_name"

这纯粹是为了生成错误消息,所以现在我只是用正则表达式抓住它。

但我很好奇我无法找到合适的方法来获取它。

1 个答案:

答案 0 :(得分:1)

Result不知道Table

首先,请注意Result原则上不知道TableResult只是由任意Select语句生成的一堆列/记录。它可能只包含A + B1NULL等表达式,这些表达式不会链接到任何物理表。

如果您知道,您从物理表中生成了Result

当然,您可以知道从物理表格中生成给定的Result,例如:使用DSLContext.selectFrom()。在这种情况下,您的通用R类型不应绑定到Record,而应绑定到TableRecord

一种可能的实施方式可能是:

private <R extends TableRecord<R>> String tableNameOf(Result<R> result) {
    return ((TableRecord<?, ?>) result.field(0)).getTable();
}