2013-01-22 16 views
6

मैं अद्यतन जानकारी के साथ एक तालिका को कैसे छोड़ूं और फिर से बना सकता हूं?SQLite ड्रॉप और मनोरंजन तालिका

उदाहरण के लिए; मेरे पास 5 रिकॉर्ड्स के साथ मेरे आवेदन में एक टेबल है।

ID  Entry 
1  a 
2  b 
3  c 
4  d 
5  e 

अब जब मैं हटाना एक रिकॉर्ड कहते हैं की सुविधा देता है, आईडी 3 तालिका मैं इसे कैसे छोड़ सकते हैं, और इसे पुन: इस बनने के लिए

ID  Entry 
1  a 
2  b 
4  d 
5  e 

हो जाता है:

ID  Entry 
1  a 
2  b 
3  d 
4  e 

असल में हटाना उपयोगकर्ता द्वारा नियंत्रित किया जाता है ताकि किसी भी समय किसी भी रिकॉर्ड को हटाया जा सके।

+0

आप इस लक्ष्य को हासिल करने के लिए क्यों चाहते हो? जब भी कुछ उपयोगकर्ता इसमें कुछ बदलते हैं तो आपको डेटाबेस को फिर से बनाना होगा। – Leandros

+1

आपको इसकी आवश्यकता क्यों है? अपने प्रश्न का उत्तर देने का एक बोझिल तरीका खोजने के बजाय, मुझे इसकी आवश्यकता नहीं होने का एक तरीका मिल जाएगा। – njzk2

+0

संख्या। मैं तालिका को डेटाबेस को फिर से बनाना चाहता हूं।कुछ कारण हैं क्यों; उदाहरण के लिए: जब कोई रिकॉर्ड हटा दिया जाता है तो वर्तमान में चयनित पंक्ति द्वारा हटाने की प्रक्रिया की जाती है क्योंकि मैं केवल पंक्ति 4 तक चुन सकता हूं, आईडी 5 को कभी भी हटाया नहीं जा सकता है। – Pztar

उत्तर

13

आप निम्न कर सकता है:

 db.execSQL("DROP TABLE IF EXISTS " + YOUR_TABLE); 

:

 public boolean deleteRow(int id) 
     { 
     return db.delete(YOUR_TABLE, ROW_ID + "=" + _id, null) > 0; 
     } 

एक ArrayList में शेष प्रविष्टियों (केवल प्रविष्टियों, नहीं आईडी) पढ़ा है, आपकी तालिका ड्रॉप: पंक्ति आप को नष्ट करना चाहते हटाना और अपनी मेज को फिर से बनाएं। फिर आईडी नंबर 1-एक्सएक्स से ऑर्डर

+1

जो मेरे पास काफी है। हालांकि जब मैं टेबल छोड़ देता हूं और फिर इसे फिर से बनाने के लिए जाता हूं, तो यह एक नल पॉइंटर के रूप में वापस आता है। मुझे नहीं पता मुझे लगता है कि मुझे इसके साथ कुछ और करना होगा। – Pztar

+0

तो क्या आप कोड दिखा सकते हैं जहां आपने यह किया है? उदाहरण के लिए यदि आपने गलत क्रम में किया है, तो यह संभव है कि आप सरणी सूची में सहेजने से पहले अपनी तालिका हटा दें। यही वजह है कि आप एक नलपोइंटर प्राप्त करते हैं। जर्मनी में हम कहते हैं, कभी-कभी आप इतने सारे पेड़ों के कारण जंगल नहीं देख सकते :) – Opiatefuchs

+0

EXISTS – Matthew

1

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मैंने सोचा कि मैं उन लोगों के लिए चीजों को साफ़ कर दूंगा जो आपकी टिप्पणी के आधार पर वही कर रहे हैं:

एक रिकार्ड हटा दी जाती है हटाने की प्रक्रिया वर्तमान में चयनित पंक्ति द्वारा किया जाता है के बाद से मैं केवल पंक्ति 4 अप करने के लिए चुन सकते हैं, आईडी 5 कभी नहीं नष्ट कर दिया जा सकता है।

आपको वास्तव में अपनी आईडी को फिर से बनाना नहीं चाहिए। यह चीजों को गड़बड़ कर देता है अगर उन्हें किसी अन्य तालिका में चाबियों के रूप में उपयोग किया जाता है, साथ ही यदि आपके पास एक बड़ा डेटाबेस है, तो उन्हें पुनर्निर्माण करने के लिए केवल समय बर्बाद कर सकते हैं जब वास्तव में आवश्यकता नहीं होती है।

आपको क्या करना चाहिए, प्रविष्टियों की एक सरणी के साथ आईडी के सरणी को सहेजना है ताकि आप जान सकें कि किस आईडी को उन्होंने चुना है (या आईडी और मूल्यों को जोड़ने का कोई अन्य तरीका जिससे आप पकड़ सकते हैं बाद में)।

उपरोक्त उदाहरण में, के बाद किसी आईडी 3 के साथ पंक्ति को हटा देता है, अपने सरणियों इस प्रकार दिखाई देगा:

entries = { "a","b","d","e" } 
ids = { 1,2,4,5 } 

किसी का चयन करता है, तो "ई" है, जो चौथे मद है, तो आप बस से हटा दें तालिका जहां आईडी आईड्स सरणी में चौथे मान के बराबर है, 5 इस मामले में।

इस तरह यदि आइटम लगातार जोड़े जा रहे हैं और हटा दिए जाते हैं, तो आपका डेटाबेस आईडी 2, 34, 56, और 435 के साथ समाप्त हो सकता है। इससे कोई फर्क नहीं पड़ता क्योंकि आपका कोड ट्रैक रखेगा और पता होगा कि कौन सी आईडी को हटाना है।

0

एक अन्य दृष्टिकोण

public boolean deleteTable(int id) { 
    SQLiteDatabase database = dbHelper.getReadableDatabase(); 
    final String whereClause = DBHelper.COLUMN_ID + "=?"; 
    final String whereArgs[] = {String.valueOf(id)}; 
    int affectedRows = database.delete(DBHelper.TABLE_NAME_OGR, whereClause, whereArgs); 
    return affectedRows > 0; 
}