Cách xóa cơ sở dữ liệu SQLite khỏi Android theo lập trình


151

Tôi muốn xóa tập tin cơ sở dữ liệu từ Android file systemchương trình? Tôi có thể khởi chạy tập lệnh shell adbđể lần lượt chạy tập lệnh shell trong không gian Android để xóa cơ sở dữ liệu không? Tôi có thể thực hiện việc này từ trong JUnittrường hợp thử nghiệm (với một system()cuộc gọi) không?

Làm cách nào để xóa toàn bộ cơ sở dữ liệu trong Android? Tôi cần phải làm cho tất cả mọi thứ biến mất để tôi có thể kiểm tra việc tạo cơ sở dữ liệu. Tôi có thể bỏ bàn, nhưng thế vẫn chưa đủ. Đây là trong trình giả lập, không phải trên điện thoại.

Câu trả lời:


410

Khi bạn có Ngữ cảnh của mình và biết tên của cơ sở dữ liệu, hãy sử dụng:

context.deleteDatabase(DATABASE_NAME);

Khi dòng này được chạy, cơ sở dữ liệu sẽ bị xóa.


14
Hãy chắc chắn rằng bạn đóng tất cả các kết nối cơ sở dữ liệu trước khi xóa. Khác bạn sẽ phải khởi động lại ứng dụng.
Jay Soyer

Đơn giản và hữu ích ... cảm ơn!
Marco Espinoza

13

Thật dễ dàng chỉ cần gõ từ vỏ của bạn:

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

Tôi nhận được thông báo "rm fail cho mydatabase.db, Quyền bị từ chối". Bạn phải có một điện thoại gốc để làm việc này? Hoặc có một cách để xác định một sự cho phép? Hay nó chỉ hoạt động trên trình giả lập?
PeteH

2
@PeteH Trên trình giả lập bạn không cần sự cho phép, nhưng đối với thiết bị thực, bạn cần phải được root
Barmaley Red Star

9
Điều này đòi hỏi root và không được lập trình .
Zoe

Đối với tôi điều này không yêu cầu bất kỳ thiết lập đặc biệt. Ý tôi là chắc chắn, tôi đã tự động đăng nhập bằng root, nhưng mọi thứ đều hoạt động :)
vlad-ardelean

Vâng tôi ở đây. root@generic_x86:/data/data/com.dslomer64.servyhelperton/databases #. Khác với loại bỏ, sao chép, và những thứ khác, chứ không phải là có một dirhoặc list fileshoặc what the heck is in this directory/folderlệnh?
DSlomer64

12

Phương thức tĩnh SQLiteDatabase.deleteDatabase (Tệp tệp) đã được thêm vào API 16. Nếu bạn muốn viết các ứng dụng hỗ trợ các thiết bị cũ hơn, bạn phải làm thế nào?

Tôi đã thử: file.delete ();

nhưng nó làm rối tung SQLiteOpenHelper.

Cảm ơn.

ĐỪNG BẬN TÂM! Sau này tôi nhận ra bạn đang sử dụng Context .deleteDatabase (). Một bối cảnh hoạt động tuyệt vời và cũng xóa tạp chí. Làm việc cho tôi.

Ngoài ra, tôi thấy rằng tôi cần phải gọi SQLiteOpenHelp.close () trước khi thực hiện xóa, để sau đó tôi có thể sử dụng LoaderManager để tạo lại nó.


11

Thử:

this.deleteDatabase(path); 

hoặc là

context.deleteDatabase(path);

6

Cũng từ Eclipse, bạn có thể sử dụng DDMS, điều này thực sự dễ dàng.

Chỉ cần đảm bảo trình giả lập của bạn đang chạy và sau đó chuyển sang phối cảnh DDMS trong Eclipse. Bạn sẽ có quyền truy cập đầy đủ vào File Explorer, cho phép bạn truy cập và dễ dàng xóa toàn bộ cơ sở dữ liệu.


1
Điều này có hoạt động với một thiết bị điện thoại thực tế? Tôi không thể thấy bất kỳ thư mục con nào trong thư mục dữ liệu trong khi xem ở chế độ DDMS.
sammiwei

1
Nhưng câu hỏi này là về việc xóa cơ sở dữ liệu theo chương trình?
Simon

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

Điều này có thể giúp một người nào đó. Bạn phải đề cập đến phần mở rộng nếu không, nó sẽ không hoạt động.


3

bối cảnh.deleteDatabase (DATABASE_NAME); sẽ xóa cơ sở dữ liệu chỉ khi tất cả các kết nối được đóng lại. Nếu bạn đang duy trì phiên bản singleton để xử lý trình trợ giúp cơ sở dữ liệu của mình - thật dễ dàng để đóng Kết nối đã mở.

Trong trường hợp cơ sở dữ liệu được sử dụng ở nhiều nơi bằng cách khởi tạo trực tiếp, xóaDatabase + killProcess sẽ thực hiện công việc ngay cả khi một số kết nối được mở. Điều này có thể được sử dụng nếu kịch bản ứng dụng không có bất kỳ vấn đề nào trong việc khởi động lại ứng dụng.


3

Xóa Db cũ khi gỡ cài đặt ứng dụng.

Cài đặt android: allowBackup = "false" trong thẻ ứng dụng trong AndroidManifest.xml đã khắc phục sự cố. Có vẻ như vì một số lý do kỳ lạ, HĐH Android đã khôi phục từ bản sao lưu mỗi khi tôi triển khai ứng dụng.


3

bạn có thể tạo một đối tượng tệp của đường dẫn cơ sở dữ liệu hiện tại và sau đó xóa nó khi chúng tôi xóa tệp khỏi thư mục

    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

Tôi đã sử dụng phương pháp xóa cơ sở dữ liệu Android và xóa cơ sở dữ liệu thành công

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

Tôi đã sử dụng cách sau để "định dạng" cơ sở dữ liệu trên thiết bị sau khi tôi đã thay đổi cấu trúc cơ sở dữ liệu trong tài sản. Tôi chỉ đơn giản là bỏ dòng trong MainActivity khi tôi muốn cơ sở dữ liệu được đọc lại từ tài sản. Điều này sẽ thiết lập lại các giá trị và cấu trúc cơ sở dữ liệu thiết bị thành mach với cơ sở dữ liệu bận tâm trong thư mục tài sản.

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

Tiếp theo, tôi sẽ thực hiện một nút sẽ chạy cơ sở dữ liệu xóa để người dùng có thể thiết lập lại tiến trình của nó trong trò chơi.


-2

Từ Trình quản lý ứng dụng, bạn có thể xóa toàn bộ ứng dụng bằng dữ liệu. Hoặc chỉ là dữ liệu của nó tự. Điều này bao gồm cơ sở dữ liệu.

  1. Điều hướng đến Cài đặt. Bạn có thể vào menu cài đặt trong menu ứng dụng hoặc trên hầu hết các điện thoại bằng cách kéo ngăn kéo thông báo xuống và nhấn vào nút ở đó.

  2. Chọn menu con Ứng dụng. Trên một số điện thoại, menu này sẽ có một tên hơi khác, chẳng hạn như Trình quản lý ứng dụng.

  3. Vuốt sang phải vào danh sách Tất cả ứng dụng. Bỏ qua danh sách các ứng dụng Chạy và Tải xuống. Bạn muốn danh sách Tất cả các ứng dụng.

  4. Chọn ứng dụng bạn muốn tắt. Một màn hình thuộc tính xuất hiện với một nút cho Force Stop ở phía trên bên trái và một cái khác cho Vô hiệu hóa hoặc Gỡ cài đặt các bản cập nhật ở phía trên bên phải.

  5. Xóa dữ liệu.


8
OP nói theo chương trình . Đi đến cài đặt và nhấn nút không theo chương trình.
mmking

@mmking Tôi đã nhận thức được điều đó. Nó chỉ là đây là wa đơn giản nhất để loại bỏ cơ sở dữ liệu và không phải bảng và nội dung. Ông nói rằng ông cần nó để kiểm tra việc tạo cơ sở dữ liệu và điều này thực hiện điều đó. Tôi đã tìm kiếm điều tương tự và giải quyết cho điều đó.
f470071
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.