2012-11-23 14 views
5

में अहस्ताक्षरित smallint मैं jOOQ उपयोग कर रहा हूँ आईडी जो 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 अहस्ताक्षरित 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

जावा लैंग सीधे इसे नहीं डाला जा सकता है। आपको मध्यवर्ती कदम की जरूरत है। कुछ UShortval.intValue()
दोहराएं क्वेरी के परिणाम की तरह, और एक नया सूची जहां ushortval.intValue() का परिणाम जोड़ने का निर्माण

+0

यह कैसे किया जाना चाहिए? –

1

यदि users एक सिस्टम टेबल है, तो आप इस प्रकार को बदल नहीं सकते हैं तो आपको इसे Integer में परिवर्तित करना होगा। अन्यथा आप Short जावा टाइप करने के लिए एक तालिका बदल सकते हैं और 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); 

आखिरी उदाहरण जो आप शायद खोज रहे थे।

यहाँ प्रासंगिक Javadocs देखें:

ध्यान दें कि Sybase एएसई के मैनुअल के लिए लिंक किसी SQL डाली आपरेशन की बात कर रहा है, नहीं एक जावा डाली अभिव्यक्ति। हो सकता है कि आपके लिए क्या भ्रामक था ...

संबंधित मुद्दे