【问题标题】:jooq String to Integer conversionjooq 字符串到整数的转换
【发布时间】:2017-10-16 12:02:26
【问题描述】:

我是 Jooq 的新手。我想将字符串转换为整数。

在表1中定义:-

TableField<?, Integer> city_id;

在表2中定义:-

TableField<?, String> city_id;

在选择查询中。

dsl.select()
   .from(Table1)
   .leftOuterJoin(Table2)
   .on(Table1.city_id.eq(Table2.city_id))
   .fetch();

由于 city_id 在 Table1 和 TABLE2 中的格式不同。所以它需要将table2的city_id从String转换为Integer,反之亦然 我试过了 Integer.valueOf(),Integer.parseInt(),不工作。

任何帮助表示赞赏。提前致谢。

【问题讨论】:

    标签: java sql jooq


    【解决方案1】:

    jOOQ 文档 (https://www.jooq.org/doc/latest/manual/sql-building/column-expressions/cast-expressions/) 描述了 cast() 的用法,它可以在语句中用于将字段转换为另一种类型。

    用你的例子:

    在表1中定义:-

    TableField<?, Integer> city_id;
    

    在表2中定义:-

    TableField<?, String> city_id;
    

    在选择查询中。

    dsl.select()
       .from(Table1)
       .leftOuterJoin(Table2)
       .on(Table1.city_id.eq(Table2.city_id))
       .fetch();
    

    使用 cast 将 Integer 转换为 String 的语句:

    dsl.select()
       .from(Table1)
       .leftOuterJoin(Table2)
       .on(Table1.city_id.cast(String.class).eq(Table2.city_id))
       .fetch();
    

    【讨论】:

      【解决方案2】:

      理想解决方案:CAST()

      Koshux 提供了一个很好的答案,您可能应该使用它,因为显式转换类型不会让转换成为机会。您可以自行选择是否:

      • 数字列被强制转换为字符串类型
      • 字符串列被强制转换为数字类型

      我只是展示了另外两个选项:

      强制:

      有一个Field.coerce() 方法可以“强制”一个jOOQ Field 引用到不同的类型,而这对生成的SQL 没有任何影响。例如:

      dsl.select()
         .from(Table1)
         .leftOuterJoin(Table2)
         .on(Table1.city_id.eq(Table2.city_id.coerce(Table1.city_id)))
         .fetch();
      

      原始类型转换:

      与强制一样,您可以使用 rawtype 强制转换来获得相同的效果(除非您使用 convertersdata type bindings):

      dsl.select()
         .from(Table1)
         .leftOuterJoin(Table2)
         .on(Table1.city_id.eq((Field) Table2.city_id))
         .fetch();
      

      旁注:

      当然,最好在两个表中使用相同的类型,并通过实际的外键约束来强制完整性。

      【讨论】:

        猜你喜欢
        • 2015-08-10
        • 2014-02-20
        • 2018-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多