使用jOOQ,如何按名称

时间:2015-11-14 19:16:56

标签: java sql jooq

我试图按名称获取字段的数据类型。我找到了方法getDataType,如果我知道该字段(例如MY_TABLE.MY_COLUMN_NAME.getDataType()),该方法效果很好。

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

我想要这个,因为我正在对结果集中使用的集合构建泛型排序函数,我更倾向于不依赖开发人员为我的比较器传递正确的数据类型。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

这些类型可从ResultRecord通过:

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

请参阅:

但是大多数标准数据类型都是ComparableI'm looking at the use-case in your answer),所以为什么不使用Java 8的新Comparator.naturalOrder()Comparator.reverseOrder()

答案 1 :(得分:0)

我正在构建一个自定义Comparator(我拿了我的结果集并将其转换为List,存储Record - 以及其他东西 - 这样我就可以对它进行各种操作,排序,过滤,等等)。为了构建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 ...
}

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