我试图从jOOQ 结果中检索基础MySQL表名。
这是我最好的尝试,作为辅助功能:
private <R extends Record> String tableNameOf(Result<R> result) {
return result.recordType().toString();
}
这会返回"database"."table_name"."first_column_name"
这纯粹是为了生成错误消息,所以现在我只是用正则表达式抓住它。
但我很好奇我无法找到合适的方法来获取它。
答案 0 :(得分:1)
Result
不知道Table
首先,请注意Result
原则上不知道Table
! Result
只是由任意Select
语句生成的一堆列/记录。它可能只包含A + B
或1
或NULL
等表达式,这些表达式不会链接到任何物理表。
Result
当然,您可以知道从物理表格中生成给定的Result
,例如:使用DSLContext.selectFrom()
。在这种情况下,您的通用R
类型不应绑定到Record
,而应绑定到TableRecord
。
一种可能的实施方式可能是:
private <R extends TableRecord<R>> String tableNameOf(Result<R> result) {
return ((TableRecord<?, ?>) result.field(0)).getTable();
}