2012-11-23 51 views
5

SMALLINT签名我使用jOOQ获得ID这在MySQL是smallint unsigned primary key auto_increment演员在Java中

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无符号应强制转换为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。

回答

3

你不能投USHORT成整数,因为它不继承类。我想你应该使用UShort.intValue()来检索整数。

1

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

+0

应该怎么做? –

1

如果users是系统表,因此您不能更改类型,那么您必须将其转换为Integer。否则,您可以更改表格并为Short Java提供TINYINT(4)

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投表达。这可能是误导你的......