วิธีลบฐานข้อมูล SQLite จาก Android โดยทางโปรแกรม


151

ฉันต้องการลบไฟล์ฐานข้อมูลออกจากAndroid file systemโปรแกรมหรือไม่? ฉันสามารถเปิดตัวเชลล์สคริปadbซึ่งจะเปิดใช้งานเชลล์สคริปต์ในพื้นที่ Android เพื่อทำการลบฐานข้อมูลได้หรือไม่ ฉันสามารถทำได้จากภายในJUnitกรณีทดสอบ (ด้วยการsystem()โทร) หรือไม่?

ฉันจะลบฐานข้อมูลทั้งหมดใน Android ได้อย่างไร ฉันต้องทำให้ทุกอย่างหายไปเพื่อที่ฉันจะสามารถทดสอบการสร้างฐานข้อมูลได้ ฉันวางตารางได้ แต่นั่นไม่เพียงพอ นี่คือตัวเลียนแบบไม่ใช่ในโทรศัพท์

คำตอบ:


410

เมื่อคุณมีบริบทและทราบชื่อของฐานข้อมูลแล้วให้ใช้:

context.deleteDatabase(DATABASE_NAME);

เมื่อบรรทัดนี้ถูกเรียกใช้ฐานข้อมูลควรถูกลบ


14
ตรวจสอบให้แน่ใจว่าคุณปิดการเชื่อมต่อฐานข้อมูลทั้งหมดก่อนที่จะลบ มิฉะนั้นคุณจะต้องเริ่มต้นแอปพลิเคชันใหม่
Jay Soyer

ง่ายและมีประโยชน์ ... ขอบคุณ!
Marco Espinoza

13

ง่ายเพียงพิมพ์จากเปลือกของคุณ:

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

ฉันได้รับข้อความกลับ "rm ล้มเหลวสำหรับ mydatabase.db, การอนุญาตถูกปฏิเสธ" คุณต้องมีโทรศัพท์รูทเพื่อใช้งานหรือไม่ หรือมีวิธีการระบุสิทธิ์หรือไม่? หรือมันใช้งานได้กับเครื่องจำลองเท่านั้น?
PeteH

2
@PeteH ตัวเลียนแบบคุณไม่จำเป็นต้องได้รับอนุญาต แต่สำหรับอุปกรณ์จริงคุณต้องทำการรูท
Barmaley Red Star

9
นี้ต้องใช้รากและไม่ได้เป็นโปรแกรม
Zoe

สำหรับฉันนี้ไม่จำเป็นต้องมีการตั้งค่าพิเศษใด ๆ ฉันหมายถึงแน่ใจว่าฉันเข้าสู่ระบบโดยอัตโนมัติในฐานะที่เป็น root แต่ทุกอย่างทำงาน :)
vlad-ardelean

ตกลงฉันอยู่ที่นี่ root@generic_x86:/data/data/com.dslomer64.servyhelperton/databases #. อื่น ๆ กว่าลบคัดลอกและสิ่งอื่น ๆ ที่ไม่ได้มีdirหรือlist filesหรือwhat the heck is in this directory/folderคำสั่ง?
DSlomer64

12

วิธีการแบบคงที่ SQLiteDatabase.deleteDatabase (ไฟล์ไฟล์) ถูกเพิ่มใน API 16 หากคุณต้องการเขียนแอพที่รองรับอุปกรณ์รุ่นเก่าคุณจะทำอย่างไร

ฉันพยายาม: file.delete ();

แต่มันจะทำให้ SQLiteOpenHelper ยุ่งเหยิง

ขอบคุณ

ไม่เป็นไร! ฉันรู้ภายหลังว่าคุณใช้บริบท.ลบฐานข้อมูล () บริบทหนึ่งใช้งานได้ดีและลบวารสารด้วย ได้ผลสำหรับฉัน

นอกจากนี้ฉันพบว่าฉันต้องเรียกSQLiteOpenHelp.close ()ก่อนทำการลบดังนั้นฉันจึงสามารถใช้ LoaderManager เพื่อสร้างมันขึ้นมาใหม่



6

นอกจากนี้จาก Eclipse คุณสามารถใช้ DDMS ซึ่งทำให้เป็นเรื่องง่าย

เพียงให้แน่ใจว่าอีมูเลเตอร์ของคุณกำลังทำงานอยู่จากนั้นสลับไปใช้มุมมอง DDMS ใน Eclipse คุณจะสามารถเข้าถึง File Explorer ได้อย่างสมบูรณ์ซึ่งจะช่วยให้คุณสามารถเข้าไปในและลบฐานข้อมูลทั้งหมดได้อย่างง่ายดาย


1
ใช้งานได้กับอุปกรณ์โทรศัพท์จริงหรือไม่ ฉันไม่เห็นโฟลเดอร์ย่อยใด ๆ ใต้โฟลเดอร์ข้อมูลขณะดูในโหมด DDMS
sammiwei

1
แต่คำถามนี้เกี่ยวกับการลบฐานข้อมูลโดยทางโปรแกรมหรือไม่
Simon

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

นี่อาจช่วยใครซักคน คุณต้องพูดถึงส่วนขยายมิฉะนั้นจะไม่สามารถใช้งานได้


3

context.deleteDatabase (database_name); จะลบฐานข้อมูลเฉพาะเมื่อการเชื่อมต่อทั้งหมดถูกปิด หากคุณยังคงอินสแตนซ์เดี่ยวสำหรับจัดการตัวช่วยฐานข้อมูลของคุณ - มันเป็นเรื่องง่ายที่จะปิดการเชื่อมต่อที่เปิดอยู่

ในกรณีที่ฐานข้อมูลผู้ช่วยเหลือถูกใช้ในหลาย ๆ ที่โดยการสร้างอินสแตนซ์โดยตรงโดยตรง deleteDatabase + killProcess จะทำงานแม้ว่าการเชื่อมต่อบางอย่างจะเปิดขึ้นก็ตาม สามารถใช้งานได้หากสถานการณ์แอปพลิเคชันไม่มีปัญหาใด ๆ ในการรีสตาร์ทแอป


3

ลบ Db เก่าเมื่อถอนการติดตั้งแอพ

การตั้งค่าandroid: allowBackup = "false"ในแท็กแอปพลิเคชันในAndroidManifest.xmlแก้ไขปัญหา ดูเหมือนว่าด้วยเหตุผลแปลก ๆ ที่ Android OS กู้คืนจากข้อมูลสำรองทุกครั้งที่ฉันปรับใช้แอพ


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

ฉันใช้วิธีลบฐานข้อมูล Android และลบฐานข้อมูลเรียบร้อยแล้ว

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");

ถัดไปฉันจะใช้ปุ่มที่จะเรียกใช้ deleteDatabase เพื่อให้ผู้ใช้สามารถรีเซ็ตความคืบหน้าในเกม


-2

จาก Application Manager คุณสามารถลบแอปพลิเคชันทั้งหมดด้วยข้อมูล หรือเพียงแค่ข้อมูลด้วยตนเอง รวมถึงฐานข้อมูล

  1. นำทางไปยังการตั้งค่า คุณสามารถไปที่เมนูการตั้งค่าได้ทั้งในเมนูแอพของคุณหรือในโทรศัพท์ส่วนใหญ่โดยการดึงลิ้นชักการแจ้งเตือนลงและแตะปุ่มที่นั่น

  2. เลือกเมนูย่อยของแอพ ในโทรศัพท์บางรุ่นเมนูนี้จะมีชื่อแตกต่างกันเล็กน้อยเช่น Application Manager

  3. ปัดไปทางขวาไปยังรายการแอพทั้งหมด ดูรายชื่อแอพที่เรียกใช้และดาวน์โหลด คุณต้องการรายการแอปทั้งหมด

  4. เลือกแอพที่คุณต้องการปิดการใช้งาน หน้าจอคุณสมบัติจะปรากฏขึ้นพร้อมกับปุ่มสำหรับบังคับให้หยุดที่ด้านซ้ายบนและอีกหน้าจอสำหรับปิดใช้งานหรือถอนการติดตั้งการอัปเดตที่ด้านขวาบน

  5. ลบข้อมูล


8
สหกรณ์กล่าวว่าprogramatically ไปที่การตั้งค่าและกดปุ่มไม่ได้เขียนโปรแกรม
mmking

@ mmking ฉันรู้เรื่องนั้นแล้ว เป็นเพียงว่านี่เป็นวิธีที่ง่ายที่สุดในการลบฐานข้อมูลไม่ใช่ตารางและเนื้อหา เขาบอกว่าเขาต้องการมันเพื่อทดสอบการสร้างฐานข้อมูลและสิ่งนี้ก็เป็นเช่นนั้น ฉันกำลังมองหาสิ่งเดียวกันและตัดสินในเรื่องนั้น
f470071
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.