我正在使用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。
答案 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强制转换表达式。这可能是误导你的......