2012-11-23 7 views
5

Używam jOOQ uzyskać identyfikator, który w MySQL smallint unsigned primary key auto_incrementObsada Smallint unsigned w Javie

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

i przejść error

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

Here pisali że smallint niepodpisane powinny być oddane do int.

Edit metoda powinna być

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

I w rezultacie pętli powinny być oddane do int.

Odpowiedz

3

Nie można rzucać ushort do Integer, gdyż nie dziedziczą, że klasa. Sądzę, że powinieneś użyć UShort.intValue(), aby pobrać liczbę całkowitą.

1

W języku java lang nie można rzucać tego bezpośrednio. Potrzebujesz pośredniego kroku. Coś UShortval.intValue()
iteracyjne wyniku zapytania i budować nową listę, w której Państwo dodać wynik ushortval.intValue()

+0

Jak należy to zrobić? –

1

Jeśli users jest tabelą systemową, więc nie można zmienić typu, należy go przekonwertować na Integer. W przeciwnym razie możesz zmienić tabelę i podać TINYINT(4) dla Javy typu Short.

0

jOOQ może wykonać dla ciebie rzutowanie i/lub zamianę. Oto kilka przykładów:

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); 

Ostatnim przykładem jest to, czego prawdopodobnie szukałeś.

Zobacz odpowiednich Javadocs tutaj:

Należy pamiętać, że link do instrukcji Sybase ASE jest odnosząc się do operacji SQL szarego, a nie Java cast wyraz. To mogło być mylące dla ciebie ...