Как удалить базу данных 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 fail for mydatabase.db, Permission denied». Должен ли у вас быть рутированный телефон, чтобы это работало? Или есть способ указать разрешение? Или это работает только на эмуляторе?
PeteH
2
@PeteH В эмуляторе вам не нужно разрешение, но для реального устройства вам понадобится рут
Barmaley Red Star
9
Это требует root и не программно .
Зоя
Для меня это не потребовало какой-либо специальной настройки. Я имею в виду, конечно, я автоматически вошел в систему как root, но все
заработало
ОК Я здесь. root@generic_x86:/data/data/com.dslomer64.servyhelperton/databases #, Кроме удаления, копирования и других вещей, не существует dirили list filesили what the heck is in this directory/folderкоманда?
DSlomer64
12

Статический метод SQLiteDatabase.deleteDatabase (File file) был добавлен в API 16. Если вы хотите писать приложения, поддерживающие более старые устройства, как вы это делаете?

Я пытался: file.delete ();

но это портит SQLiteOpenHelper.

Спасибо.

НЕВАЖНО! Позже я понял, что вы используете Context .deleteDatabase (). Context один прекрасно работает и удаляет журнал тоже. Работает для меня.

Кроме того, я обнаружил, что мне нужно вызвать SQLiteOpenHelp.close () перед выполнением удаления, чтобы затем я мог использовать LoaderManager для его воссоздания.

Рик Фальк
источник
11

Пытаться:

this.deleteDatabase(path); 

или

context.deleteDatabase(path);
DRW
источник
6

Также из Eclipse вы можете использовать DDMS, что делает его действительно простым.

Просто убедитесь, что ваш эмулятор работает, а затем переключитесь на перспективу DDMS в Eclipse. У вас будет полный доступ к File Explorer, который позволит вам войти и легко удалить всю базу данных.

xtempore
источник
1
Работает ли это с реальным устройством телефона? Я не мог видеть никаких подпапок в папке данных при просмотре в режиме DDMS.
sammiwei
1
Но этот вопрос касается удаления базы данных программно?
Саймон
6
context.deleteDatabase("database_name.db");

Это может кому-то помочь. Вы должны упомянуть расширение, иначе оно не будет работать.

Вишванат Мирджи
источник
3

context.deleteDatabase (DATABASE_NAME); удалит базу данных, только если все соединения закрыты. Если вы поддерживаете одноэлементный экземпляр для обработки вашего помощника по базе данных - легко закрыть открытое соединение.

В случае, если база данных helper используется в нескольких местах путем непосредственного создания экземпляра, deleteDatabase + killProcess выполнит эту работу, даже если некоторые соединения открыты. Это можно использовать, если в сценарии приложения нет проблем при перезапуске приложения.

Аун
источник
3

Удалить старую базу данных при удалении приложения.

Установка android: allowBackup = "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. Удалить данные.

f470071
источник
8
ОП сказал программно . Переход к настройкам и нажатие кнопки не программно.
mmking
@ Ммм, я знал об этом. Просто это самый простой способ удалить базу данных, а не таблицы и контент. Он сказал, что ему нужно, чтобы проверить создание базы данных, и это делает это. Я искал то же самое и согласился на это.
f470071