5

我正在使用 jOOQ 来获取 MySQL 中的 idsmallint 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

在这里,他们写道,应该将 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

4 回答 4

3

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

于 2012-11-23T11:19:09.157 回答
1

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

于 2012-11-23T11:17:30.680 回答
1

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

于 2012-11-23T11:27:55.627 回答
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);

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

在此处查看相关的 Javadocs:

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

于 2012-11-23T14:09:25.473 回答