Як видалити базу даних SQLite з Android програмно


151

Я хотів би видалити файл бази даних Android file systemпрограмно? Чи можу я запустити скрипт оболонки, adbякий по черзі запускає скрипт оболонки в просторі Android, щоб зробити видалення бази даних? Чи можу я це зробити з 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, у дозволі відмовлено". Повинен у вас є вкорінений телефон для цього? Або є спосіб вказати дозвіл? Або це працює лише на емуляторі?
PeteH

2
@PeteH На емуляторі вам не потрібен дозвіл, але для реального пристрою вам потрібно вкоренитися
Barmaley Red Star

9
Для цього потрібен корінь і це не програмно .
Зої

Для мене це не вимагало особливих налаштувань. Я маю на увазі впевнений, що я автоматично входив як 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.

Дякую.

НЕ ЗВЕРТАЙ УВАГИ! Пізніше я зрозумів, що ви використовуєте Context .deleteDatabase (). Контекст відмінно працює і видаляє журнал. Працює для мене.

Крім того, я виявив, що мені потрібно викликати SQLiteOpenHelp.close (), перш ніж виконувати видалення, щоб потім міг використовувати LoaderManager для його відтворення.


11

Спробуйте:

this.deleteDatabase(path); 

або

context.deleteDatabase(path);

6

Крім того, від Eclipse ви можете використовувати DDMS, що робить його дуже просто.

Просто переконайтеся, що ваш емулятор працює, а потім переключіться на перспективу DDMS у програмі Eclipse. Ви отримаєте повний доступ до Провідника файлів, який дозволить вам зайти і легко видалити всю базу даних.


1
Це працює з фактичним пристроєм телефону? Під час перегляду в режимі DDMS я не бачив підпапок під папкою даних.
sammiwei

1
Але це питання щодо видалення бази даних програмно?
Саймон

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

Це може комусь допомогти. Ви повинні згадати про розширення в іншому випадку, воно не спрацює.


3

context.deleteDatabase (DATABASE_NAME); видалить базу даних, лише якщо всі з'єднання закриті. Якщо ви підтримуєте одиночний екземпляр для обробки помічника вашої бази даних - легко закрити відкрите з'єднання.

У випадку, якщо помічник бази даних використовується в декількох місцях шляхом інстанції безпосередньо, deleteDatabase + killProcess зробить роботу, навіть якщо деякі з'єднання відкриті. Це можна використовувати, якщо сценарій програми не має жодних проблем при перезапуску програми.


3

Видаліть старий Db при видаленні програми.

Встановлення андроїда: enableBackup = "false" у тезі програми в AndroidManifest.xml виправлено проблему. Здається, з якихось дивних причин ОС Android відновлювалася із резервної копії кожного разу, коли я розгортав додаток.


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

З диспетчера програм ви можете видалити всю програму з даними. Або просто дані самостійно. Сюди входить база даних.

  1. Перейдіть до Налаштування. Ви можете потрапити в меню налаштувань або в меню своїх додатків, або на більшості телефонів, потягнувши панель сповіщень і натиснувши там кнопку.

  2. Виберіть підменю Apps. На деяких телефонах це меню матиме дещо іншу назву, таку як Диспетчер програм.

  3. Проведіть праворуч до списку Усі програми. Ігноруйте списки запущених та завантажених програм. Ви хочете список усіх додатків.

  4. Виберіть додаток, яке ви хочете відключити. З'явиться екран властивостей з кнопкою для примусового зупинення у верхньому лівому куті та іншою для вимкнення або видалення оновлень у верхній правій частині.

  5. Видалити дані.


8
ОП сказало програмно . Перехід до налаштувань і натискання кнопки не є програмним шляхом.
mmking

@mmking Я знав про це. Просто це найпростіший wa для видалення бази даних, а не таблиць і вмісту. Він сказав, що йому потрібно тестувати створення бази даних, і це робить це. Я шукав те саме і вирішив це.
f470071
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.