एंड्रॉइड प्रोग्राम से SQLite डेटाबेस को कैसे हटाएं


151

मैं डेटाबेस फ़ाइल को Android file systemप्रोग्रामेटिक रूप से हटाना चाहूंगा ? क्या मैं एक शेल स्क्रिप्ट लॉन्च कर सकता हूं, adbजो डेटाबेस हटाने के लिए एंड्रॉइड स्पेस में शेल स्क्रिप्ट चलाता है? क्या मैं इसे JUnitटेस्ट केस ( system()कॉल के साथ ) से प्राप्त कर सकता हूं ?

मैं Android में एक संपूर्ण डेटाबेस कैसे हटाऊं? मुझे पूरी चीज़ बनाने की ज़रूरत है ताकि मैं डेटाबेस निर्माण का परीक्षण कर सकूँ। मैं टेबल गिरा सकता हूं, लेकिन यह पर्याप्त नहीं है। यह एमुलेटर में है, फोन पर नहीं।

जवाबों:


410

एक बार जब आप अपने संदर्भ और डेटाबेस का नाम जानते हैं, तो उपयोग करें:

context.deleteDatabase(DATABASE_NAME);

जब यह लाइन चलती है, तो डेटाबेस को हटा दिया जाना चाहिए।


14
सुनिश्चित करें कि आप हटाने से पहले सभी डेटाबेस कनेक्शन बंद कर दें। और आपको एप्लिकेशन पुनः आरंभ करना होगा।
जे सोयर

सरल और उपयोगी ... धन्यवाद!
मार्को एस्पिनोजा

13

यह आपके शेल से आसान प्रकार है:

adb shell
cd /data/data
cd <your.application.java.package>
cd databases
su rm <your db name>.db

मुझे संदेश वापस मिला "rm mydatabase.db के लिए विफल रहा, अनुमति अस्वीकृत"। इस काम के लिए आपके पास एक रूटेड फोन होना चाहिए? या एक अनुमति निर्दिष्ट करने का कोई तरीका है? या यह केवल एमुलेटर पर काम करता है?
पेटे

2
@PeteH एमुलेटर पर आपको अनुमति की आवश्यकता नहीं है, लेकिन असली डिवाइस के लिए आपको रूट करने की आवश्यकता होगी
Barmaley Red Star

9
इसके लिए रूट की आवश्यकता है और यह प्रोग्रामेटिक रूप से नहीं है
ज़ो

मेरे लिए इसे किसी विशेष सेटअप की आवश्यकता नहीं थी। मुझे यकीन है कि, मैं स्वचालित रूप से रूट के रूप में लॉग इन किया गया था, लेकिन सब कुछ काम किया :)
vlad-ardelean

ठीक है, मैं यहाँ हूँ। root@generic_x86:/data/data/com.dslomer64.servyhelperton/databases #। , को हटाने प्रतिलिपि, और अन्य बातों के अलावा, वहाँ एक नहीं है dirया list filesया what the heck is in this directory/folderआदेश?
DSlomer64

12

API 16 में SQLiteDatabase.deleteDatabase (फ़ाइल फ़ाइल) स्थिर विधि जोड़ी गई थी। यदि आप पुराने डिवाइसों का समर्थन करने वाले ऐप्स लिखना चाहते हैं, तो आप यह कैसे करते हैं?

मैंने कोशिश की: file.delete ();

लेकिन यह SQLiteOpenHelper को गड़बड़ करता है।

धन्यवाद।

कोई बात नहीं! मुझे बाद में एहसास हुआ कि आप संदर्भ .deleteDatabase () का उपयोग कर रहे हैं । संदर्भ एक महान काम करता है और पत्रिका को भी हटा देता है। मेरे लिये कार्य करता है।

इसके अलावा, मैंने पाया कि मुझे डिलीट करने से पहले SQLiteOpenHelp.close () को कॉल करने की आवश्यकता थी , ताकि मैं फिर से लोड करने के लिए LoaderManager का उपयोग कर सकूं।


11

प्रयत्न:

this.deleteDatabase(path); 

या

context.deleteDatabase(path);

6

इसके अलावा ग्रहण से आप डीडीएमएस का उपयोग कर सकते हैं जो इसे वास्तव में आसान बनाता है।

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


1
क्या यह वास्तविक फोन डिवाइस के साथ काम करता है? मैं डीडीएमएस मोड में देखने के दौरान किसी भी सबफ़ोल्डर को डेटा फ़ोल्डर में नहीं देख सकता था।
sammiwei

1
लेकिन यह सवाल डेटाबेस को प्रोग्रामेटिक रूप से हटाने के बारे में है?
साइमन

6
context.deleteDatabase("database_name.db");

यह किसी की मदद कर सकता है। आपको एक्सटेंशन का उल्लेख करना होगा अन्यथा, यह काम नहीं करेगा।


3

context.deleteDatabase (Database_Name); डेटाबेस को केवल तभी हटा देगा जब सभी कनेक्शन बंद हो जाएंगे। यदि आप अपने डेटाबेस सहायक को संभालने के लिए सिंगलटन इंस्टेंस बना रहे हैं - खुले हुए कनेक्शन को बंद करना आसान है।

सीधे डेटाबेस में कई जगह इस्तेमाल किया जाता है, तुरंत डिलीट करने से, डिलीटबेसैब्स + किलप्रोसेस काम करेंगे, भले ही कुछ कनेक्शन खुले हों। इसका उपयोग किया जा सकता है यदि एप्लिकेशन परिदृश्य में ऐप को पुनरारंभ करने में कोई समस्या नहीं है।


3

ऐप को अनइंस्टॉल करने पर पुराना Db डिलीट करें।

Android सेट करना : AndroidManifest.xml में एप्लिकेशन टैग में allowBackup = "false" समस्या को ठीक करता है। ऐसा लगता है कि कुछ अजीब कारण से एंड्रॉइड ओएस हर बार जब मैं ऐप को तैनात करता था तो बैकअप से बहाल हो जाता था।


3

आप वर्तमान डेटाबेस पथ का एक फ़ाइल ऑब्जेक्ट बना सकते हैं और फिर इसे हटा सकते हैं क्योंकि हम फ़ाइल को फ़ोल्डर से हटाते हैं

    File data = Environment.getDataDirectory();
    String currentDBPath = "/data/com.example.demo/databases/" + DATABASE_NAME;
    File currentDB = new File(data, currentDBPath);
    boolean deleted = SQLiteDatabase.deleteDatabase(currentDB);

0

मैंने एंड्रॉइड डेटाबेस डिलीट मेथड और डेटाबेस को सफलतापूर्वक हटा दिया

public bool DeleteDatabase()
        {
            var dbName = "TenderDb.db";
            var documentDirectoryPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
            var path = Path.Combine(documentDirectoryPath, dbName);
            return Android.Database.Sqlite.SQLiteDatabase.DeleteDatabase(new Java.IO.File(path));
        }

0

मैंने डेटाबेस पर डिवाइस में "स्वरूपण" के लिए निम्नलिखित का उपयोग किया है क्योंकि मैंने परिसंपत्तियों में डेटाबेस की संरचना को बदल दिया है। मैं केवल MainActivity में लाइन को अनफिल्ट करता हूं जब मैं चाहता था कि डेटाबेस फिर से परिसंपत्तियों से पढ़ा जाए। यह डिवाइस डेटाबेस मान और संरचना को संपत्ति फ़ोल्डर में पहले से मौजूद डेटाबेस के साथ मच करने के लिए रीसेट करेगा।

    //database initialization. Uncomment to clear the database
    //deleteDatabase("questions.db");

इसके बाद, मैं एक बटन लागू करूंगा जो डिलीटडाटबेस चलाएगा ताकि उपयोगकर्ता गेम में अपनी प्रगति को रीसेट कर सके।


-2

एप्लिकेशन मैनेजर से, आप डेटा के साथ पूरे एप्लिकेशन को हटा सकते हैं। या सिर्फ इसके द्वारा डेटा स्व। इसमें डेटाबेस शामिल है।

  1. सेटिंग्स पर जाएँ। आप नोटिफिकेशन ड्रॉअर को खींचकर और वहां एक बटन टैप करके, आप अपने ऐप मेनू में या अधिकतर फोन पर सेटिंग्स मेनू पर पहुंच सकते हैं।

  2. एप्लिकेशन सबमेनू का चयन करें। कुछ फोन पर इस मेनू का थोड़ा अलग नाम होगा जैसे कि एप्लिकेशन मैनेजर।

  3. सभी एप्लिकेशन सूची में दाईं ओर स्वाइप करें। रनिंग और डाउनलोड किए गए ऐप्स की सूचियों को अनदेखा करें। आप सभी एप्लिकेशन सूची चाहते हैं।

  4. उस एप्लिकेशन का चयन करें जिसे आप अक्षम करना चाहते हैं। फोर्स स्टॉप के ऊपरी हिस्से पर फोर्स स्टॉप के लिए एक प्रॉपर्टी स्क्रीन दिखाई देती है और दूसरा ऊपरी दाईं ओर डिसेबल या अनइंस्टॉल अपडेट के लिए।

  5. डेटा हटाएं।


8
ओपी ने कार्यक्रमपूर्वक कहा । सेटिंग्स में जाना और एक बटन को मारना प्रोग्रामेटिक रूप से नहीं है
मिमी

@mmking मैं उस के बारे में पता था। यह सिर्फ इतना है कि यह डेटाबेस और तालिकाओं और सामग्री को हटाने के लिए सबसे सरल वा है। उन्होंने कहा कि उन्हें डेटाबेस निर्माण का परीक्षण करने की आवश्यकता है और यह ऐसा करता है। मैं उसी चीज की तलाश में हूं और उसी के लिए बस गया हूं।
f470071
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.