在Java中使用unsigned转换smallint

时间:2012-11-23 11:13:22

标签: java mysql casting jooq

我正在使用jOOQ获取id在MySQL中的smallint unsigned primary key auto_increment

public List<Integer> getID() {
   Factory sql = new Factory(Database.getInstance().connect(), SQLDialect.MYSQL);
   return (List<Integer>) sql.select().from("users").fetch().getValues("id_users");
}

然后出错

org.jooq.tools.unsigned.UShort cannot be cast to java.lang.Integer

Here他们写道,smallint unsigned应该转换为int。

修改 方法应该是

public List<UShort> getID() {
    Factory sql = new Factory(Database.getInstance().connect(), SQLDialect.MYSQL);
    return (List<UShort>) sql.select().from("users").fetch().getValues("id_users");
}

并且循环结果应该转换为int。

4 个答案:

答案 0 :(得分:3)

您不能将UShort转换为Integer,因为它不会继承该类。我想你应该使用UShort.intValue()来检索整数。

答案 1 :(得分:1)

java lang无法直接转换它。你需要中间步骤。 类似于UShortval.intValue()的东西 迭代查询的结果,并建立一个新的List,在其中添加ushortval.intValue()的结果

答案 2 :(得分:1)

如果users是系统表,则无法更改类型,则必须将其转换为Integer。否则,您可以更改表并为类型TINYINT(4) Java提供Short

答案 3 :(得分:0)

jOOQ可以为您进行类型转换和/或转换。以下是几个例子:

Result<?> result = sql.select().from("users").fetch();

// Without any type information
List<?> list1 = result.getValues("id_users");

// Using your implicit knowledge about id_users being an unsigned short:
@SuppressWarnings("unchecked")
List<UShort> list2 = (List<UShort>) result.getValues("id_users");

// Using jOOQ's code-generator for type-safe field access:
List<UShort> list3 = result.getValues(USERS.ID_USERS);

// Using jOOQ's conversion features to convert UShort into whatever you prefer
List<Integer> list4a = result.getValues("id_users", Integer.class);
List<Integer> list4b = result.getValues(USERS.ID_USERS, Integer.class);

最后一个例子是你可能正在寻找的东西。

请在此处查看相关的Javadoc:

请注意,Sybase ASE手册的链接是指SQL强制转换操作,而不是Java强制转换表达式。这可能是误导你的......