2012-11-23 85 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投表達。這可能是誤導你的......