使用jOOQ,如何按名称获取列的数据类型

Using jOOQ, how to get data type of a column by name

我正在尝试通过名称获取字段的数据类型。如果我知道该字段(例如 MY_TABLE.MY_COLUMN_NAME.getDataType()).

,我发现方法 getDataType 效果很好

但我想通过字段名称(例如 aDSL.fieldByName("my_column_name").getDataType())找到它,其中 aDSL 的类型为 DSLContext

我想要这个是因为我在从结果集中使用的集合上构建一个通用排序函数,我不想依赖开发人员为我的比较器传递正确的数据类型。

有什么建议吗?

我正在构建一个自定义 Comparator(我将我的结果集转换为列表,存储记录 - 除其他外 - 这样我就可以对其进行各种操作,排序,过滤等)。为了构建比较器,我需要类型:

switch (R1.dataRecord.getValue( element ).getClass().toString())
{
   case "class java.lang.Long":
      compareResult = ( (Long) R1.dataRecord.getValue( element ) ).compareTo( (Long) R2.dataRecord.getValue( element ) );
      if (compareResult != 0)
           return compareResult * compareOrder;
           break;
   case "class java.lang.String":
      compareResult = ( (String) R1.dataRecord.getValue( element ) ).compareTo( (String) R2.dataRecord.getValue( element ) );
      if (compareResult != 0)
           return compareResult * compareOrder;
      break;
    ... etc ...
}

我能够从记录中获取类型。

这些类型可从 ResultRecord 通过:

Class<?> type1 = result.field("MY_COLUMN").getType()
Class<?> type2 = record.field("MY_COLUMN").getType()

参见:

但是大多数标准数据类型都是 Comparable), so why not just use Java 8's new Comparator.naturalOrder() and perhaps Comparator.reverseOrder()