2012-04-11 8 views
5

मैं तारीख को संग्रहीत करने के लिए डेटाबेस का उपयोग कर रहा हूं और एक कॉलम वापस लौटा चाहता हूं, जहां क्लाउड में कौन सी आईडी दी गई है।जांचें कि कर्सर के परिणाम

public String getPmax(String serial) { 

    String[] columns = new String[]{KEY_SERIAL, KEY_PMAX};  
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, "serial = " + serial, 
    null, null, null, null); 

    String result = "nothing found"; 

    if(c != null) { 

     int iPmax = c.getColumnIndex(KEY_PMAX); 

     c.moveToFirst(); 
     result = c.getString(iPmax); 

    } 

    return result; 

} 

इस कोड काम करता है अगर मैं एक धारावाहिक डेटाबेस में है कि उपयोग करते हैं लेकिन जब मैं एक धारावाहिक है कि डेटाबेस में नहीं है का उपयोग कर रहा यह मुझे एक शक्ति करीब देता है!

यह कहते हैं:

04-11 16:31:19.423: E/AndroidRuntime(21226): java.lang.RuntimeException: Unable to start activity ComponentInfo{nl.janjanus.solardetect/nl.janjanus.solardetect.DatabaseView}: android.database.sqlite.SQLiteException: no such column: g: , while compiling: SELECT serial, pmax FROM SolareCel WHERE serial = g 

तो मेरे सवाल है: मैं कैसे अगर वहाँ परिणाम है की जाँच करते हैं? या मुझे यह जांचने की ज़रूरत है कि क्या सीरियल दिया गया है जो डेटाबेस में है?

उत्तर

36
if (!(mCursor.moveToFirst()) || mCursor.getCount() ==0){ 
    //cursor is empty 
} 
+0

कर्सर में कोई पंक्ति नहीं है, यह खाली है लेकिन उपरोक्त परीक्षण अभी भी असफल हैं, वह क्यों है? क्या कोई और जांच है? यह वास्तव में परेशान है। – Namratha

+2

नोट: कर्सर को पहली स्थिति में सेट करने का दुष्प्रभाव है। एक कर्सर ऑब्जेक्ट को पारित करने में कोई समस्या हो सकती है जिसे किसी अन्य स्थिति में किसी विशिष्ट स्थिति में ले जाया गया है और फिर भी स्थिति में रहने की उम्मीद है :) –

2

आप देख सकते हैं कर्सर तत्व हैं:

boolean isEmpty = cursor.getCount() < 1; 

AFAIK, कर्सर अशक्त रिटर्न कभी नहीं जब कोई पंक्ति जो अनुरोध किया की स्थिति, सिर्फ एक खाली कर्सर वापसी है।

+1

केवल अपवाद ने काम किया है चेक मेरे लिए काम नहीं करता है। क्या ऐसा करने का कोई और तरीका नहीं है? – Faas

4

यदि आप बारीकी से देखते हैं, तो त्रुटि यह है कि एसक्यूएल दोषपूर्ण है। यह कॉलम के रूप में g पढ़ता है। आपको 'g' जैसे एस्ट्रोफ़ेस में इसे एन्सेज़ करना होगा।

आपके मामले में, लाइन जहां कर्सर होना चाहिए मिलती है:

Cursor c = ourDatabase.query(DATABASE_TABLE, columns, "serial = '" + serial + "'", 
    null, null, null, null); 

जाँच कर्सर कोई परिणाम नहीं है कि क्या करने के लिए के रूप में, समीर Mangroliya के जवाब को देखो।

0
int x = cursor.getCount(); //this will return number of records in current cursor 
if (x == 0) { 
    // there are no records 
} else { 
    // do your stuff 
} 
संबंधित मुद्दे