2012-07-02 18 views
12

मुझे "last_insert_rowid()" में कोई समस्या है।"SELECT last_insert_rowid()" हमेशा देता है "0"

मेरी डीबी हेल्पर-क्लास में मैं निम्नलिखित कर रहा हूँ:

public int getLastID() { 
    final String MY_QUERY = "SELECT last_insert_rowid() FROM "+ DATABASE_TABLE5; 
    Cursor cur = mDb.rawQuery(MY_QUERY, null); 
    cur.moveToFirst(); 
    int ID = cur.getInt(0); 
    cur.close(); 
    return ID; 
} 

लेकिन जब मैं अपने इरादे में इस फोन:

int ID = mDbHelper.getLastID(); 
Toast.makeText(this, "LastID: " + ID, Toast.LENGTH_SHORT).show(); 

मैं हमेशा वापस पाने "0"। ऐसा नहीं हो सकता है, क्योंकि मेरे डीबी में बहुत सी प्रविष्टियां हैं और ऑटोइनक्रिकमेंट मान बहुत अधिक होना चाहिए।

मैं क्या गलत कर रहा हूं?

+7

क्या आप अपनी अंतिम प्रविष्टि के तुरंत बाद पंक्ति आईडी प्राप्त कर रहे हैं? जैसा कि मैं फ़ंक्शन को समझता हूं, यह केवल एक पंक्ति आईडी लौटाएगा यदि आप अपने अंतिम सम्मिलन के समान खुले कनेक्शन का उपयोग कर रहे हैं। – JohnP

+1

ओह, मैंने फ़ंक्शन को गलत समझा। यह हो सकता है। मैं जो करना चाहता था वह तालिका में उच्चतम आईडी प्राप्त करना है। क्या इसके लिए कोई और काम है? – venni

+0

@ जॉन - धन्यवाद, आपकी टिप्पणी ने मुझे एक बग का पता लगाने में मदद की। –

उत्तर

20

ठीक, यह सही संकेत जॉन ;-)

क्वेरी इस तरह दिखना चाहिए था:

public int getHighestID() { 
final String MY_QUERY = "SELECT MAX(_id) FROM " + DATABASE_TABLE5; 
Cursor cur = mDb.rawQuery(MY_QUERY, null); 
cur.moveToFirst(); 
int ID = cur.getInt(0); 
cur.close(); 
return ID; 
} 
9

आप last_insert_rowid() साथ तालिका नाम डाल करने के लिए यह स्वचालित रूप से पिछले डाला चयन करेंगे की जरूरत नहीं है सत्र से आईडी। तो आप बस इस समारोह का भी उपयोग कर सकते हैं।

public int getHighestID() { 
    final String MY_QUERY = "SELECT last_insert_rowid()"; 
    Cursor cur = mDb.rawQuery(MY_QUERY, null); 
    cur.moveToFirst(); 
    int ID = cur.getInt(0); 
    cur.close(); 
    return ID; 
} 
संबंधित मुद्दे