2012-09-24 3 views
5

निम्न क्वेरी है जिसका उपयोग मैं अपने एसक्लाइट डीबी तालिका में किसी विशेष फ़ील्ड से संबंधित एक int मान लाने के लिए करता हूं।एसक्लाइट क्वेरी 0 लौट रही है, भले ही मान शून्य है

"SELECT conn_status FROM profiles WHERE devID = '" + id+"'" 

अगर वहाँ 'conn_status' इसी को Devid प्रदान की के लिए सहेज कर कोई मूल्य नहीं है, तो तालिका में मौजूदा मान शून्य हो जाएगा।

c.getInt(c.getColumnIndex("conn_status")) 

समस्या यहाँ है, विशेष क्वेरी के साथ, c.getInt रिटर्न 0 भले ही क्षेत्र में मौजूदा मूल्य शून्य है: दिखाया गया के रूप में मैं जावा से डेटा पुनः प्राप्त। मैं इस क्वेरी को कैसे संशोधित कर सकता हूं कि, यदि यह शून्य शून्य है, तो 5 के बजाय यह एक अलग मान देता है।

किसी भी मदद की सराहना की जाती है।

उत्तर

15

आप isNull() फ़ंक्शन का उपयोग कर सकते हैं। यहाँ एक उदाहरण है:

static int getInt(String columnName) 
{ 
    if(c.isNull(c.getColumnIndex(columnName))) 
     return -1; 
    return c.getInt(c.getColumnIndex(columnName)); 
} 
+0

बेहतर अभ्यास वापसी इंटीजर आदिम int नहीं है और शून्य में वापस शून्य और मॉडल में नियंत्रण त्रुटियों को वापस नहीं करता है। –

3

int जावा में एक आदिम डेटाप्रकार है और null नहीं हो सकता। इसलिए, यदि आपके getInt द्वारा कोई मूल्य वापस नहीं किया गया है, तो आपको 0. मिल जाता है इंटीजर ऑब्जेक्ट शून्य हो सकता है ताकि आप int के बजाय इंटीजर का उपयोग करने पर विचार करना चाहें, यदि आपके तर्क के लिए आपको 0 के

16

की बजाय नल की जांच करने की आवश्यकता है SQLite में, आप NULL मूल्यों को बदलने के लिए IFNULL फ़ंक्शन का उपयोग कर सकते हैं:

SELECT IFNULL(conn_status, 5) FROM profiles WHERE devID = ? 
0

Android में पूर्णांक ऑब्जेक्ट का उपयोग आदिम int नहीं, पूर्णांक नल, आदिम int कारण अपवाद नहीं है। मॉडल में सत्यापित करें कि क्या मान शून्य है या सामग्री को संसाधित करता है।

/** 
* Return real integer of value or null 
* @param column_name Name of column in result 
*/ 
public Integer getInt(String column_name){ 
    try{ 
     if(cursor.isNull(cursor.getColumnIndex(column_name))) 
      return null; 
     return cursor.getInt(cursor.getColumnIndex(column_name)); 
    }catch(Exception e){ 
     e.printStackTrace(); 
     Log.e("sqlite_exception", "column " + column_name + " not exists. " + e.getMessage()); 
     return null; 
    } 
} 
0

आप बता सकते हैं कि कॉलम getType() को कॉल करके शून्य है या नहीं।

Integer locationInfoId; 

if (cursor.getType(columnIndex) == Cursor.FIELD_TYPE_NULL){ 
    locationInfoId = null; 
} else { 
    locationInfoId = cursor.getInt(columnIndex); 
} 

columnIndex++; 
2

जैसा कि आप कॉलम वाले शून्य मान के साथ 5 जैसे किसी भी अलग मूल्य चाहते हैं तो कोड का पालन करने का प्रयास करें।

Cursor c = db.rawQuery("SELECT conn_status FROM profiles WHERE devID = '" + id+"'"); 

    if(c.getCount>0){ 
    int number = c.getInt(c.getColumnIndex(conn_status)); 
    return number; 
    }else{ 
    return 5; 
    } 

अगर कर्सर.getकाउंट() कुछ लौटाता है तो क्वेरी का काम और डेटाबेस शून्य मूल्य नहीं है। यदि विपरीत रिटर्न का मतलब है क्वेरी क्वेरी और संबंधित क्वेरी के लिए शून्य मान वाले डेटाबेस नहीं है। तो इसे एक बार कोशिश करें।

0

मैं एक माना जाता है कि NULL एक c.getInt(index) कॉल में 0 लौटने मूल्य के साथ एक ही मुद्दा था।

यह पता चला है कि मेरे डेटाबेस में null का टेक्स्ट मान था। यही है, NULL के 0 बाइट मान के बजाय, 4 वर्ण 'n' 'u' 'l' 'l' थे। यह भ्रमित है क्योंकि null सही दिखता है। जब तक मैंने SQLite DB ब्राउज़र के साथ डीबी की जांच नहीं की तब तक मैंने इसे पकड़ नहीं लिया।

जब मैंने उन टेक्स्ट मानों को प्रतिस्थापित किया, तो चीजें अपेक्षित थीं।

मुझे पता है कि यह एक पुराना सवाल है, लेकिन उम्मीद है कि यह किसी और को कुछ समस्या निवारण समय बचाएगा।

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