プログラムでAndroidからSQLiteデータベースを削除する方法


151

Android file systemプログラムからデータベースファイルを削除しますか?シェルスクリプトを起動adbして、Androidスペースでシェルスクリプトを実行し、データベースを削除することはできますか?これをJUnitテストケース内から(system()電話で)取得できますか?

Androidでデータベース全体を削除するにはどうすればよいですか?データベースの作成をテストできるように、すべてを廃止する必要があります。テーブルをドロップできますが、それだけでは不十分です。これは、電話ではなくエミュレータ内にあります。

回答:


410

コンテキストを取得し、データベースの名前がわかったら、次を使用します。

context.deleteDatabase(DATABASE_NAME);

この行が実行されたら、データベースを削除する必要があります。


14
削除する前に、必ずすべてのデータベース接続を閉じてください。それ以外の場合は、アプリケーションを再起動する必要があります。
ジェイソイヤー2013

シンプルで便利な...ありがとう!
Marco Espinoza

13

シェルからタイプするだけで簡単です:

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

「mydatabase.dbのrmに失敗しました。権限が拒否されました」というメッセージが返されます。これを機能させるには、根ざした電話が必要ですか?または、権限を指定する方法はありますか?それともエミュレータでのみ機能しますか?
PeteH 2013年

2
@PeteHエミュレータでは許可は必要ありませんが、実際のデバイスではルート権限を取得する必要があります
Barmaley Red Star 2013

9
これにはrootが必要で、プログラムによるものではありません
Zoe

私にとって、これは特別な設定を必要としませんでした。確かに、私は自動的にrootとしてログインしましたが、すべてうまく
いき

はい、ここにいます。root@generic_x86:/data/data/com.dslomer64.servyhelperton/databases #。削除、コピー、その他のもの以外に、diror list filesまたはwhat the heck is in this directory/foldercommand はありませんか?
DSlomer64 2017

12

SQLiteDatabase.deleteDatabase(File file)静的メソッドがAPI 16に追加されました。古いデバイスをサポートするアプリを作成する場合、どのように行うのですか?

私が試した:file.delete();

SQLiteOpenHelperを台無しにしてしまいます。

ありがとう。

気にしないで! 後でContext .deleteDatabase()を使用していることに気づきました。コンテキスト1はうまく機能し、ジャーナルも削除します。私のために働く。

また、削除を行う前にSQLiteOpenHelp.close()を呼び出す必要があることがわかりました。これにより、LoaderManagerを使用して再作成できます。


11

試してください:

this.deleteDatabase(path); 

または

context.deleteDatabase(path);

6

また、EclipseからはDDMSを使用できるため、非常に簡単です。

エミュレータが実行されていることを確認してから、EclipseでDDMSパースペクティブに切り替えます。ファイルエクスプローラーへの完全なアクセス権があり、データベース全体を簡単に削除できます。


1
これは実際の電話デバイスで動作しますか?DDMSモードで表示しているときに、データフォルダーの下にサブフォルダーが表示されませんでした。
sammiwei、2012

1
しかし、この質問はプログラムでデータベースを削除することについてですか?
Simon

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

これは誰かを助けるかもしれません。それ以外の場合は拡張機能に言及する必要があります。そうしないと機能しません。


3

context.deleteDatabase(DATABASE_NAME); すべての接続が閉じている場合にのみ、データベースが削除されます。データベースヘルパーを処理するためのシングルトンインスタンスを維持している場合、開いている接続を閉じるのは簡単です。

databasehelperが直接インスタンス化されて複数の場所で使用されている場合、一部の接続が開いていても、deleteDatabase + killProcessはそのジョブを実行します。これは、アプリケーションのシナリオでアプリの再起動に問題がない場合に使用できます。


3

アプリをアンインストールするときに古いDbを削除します。

AndroidManifest.xmlのアプリケーションタグでandroid:allowBackup = "false"を設定すると、問題が修正されました。奇妙な理由で、アプリをデプロイするたびに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

アプリケーションマネージャから、データを含むアプリケーション全体を削除できます。または、それ自体でデータを収集します。これにはデータベースが含まれます。

  1. [設定]に移動します。アプリメニューまたはほとんどのスマートフォンでは、通知ドロワーをプルダウンしてボタンをタップすることで、設定メニューにアクセスできます。

  2. [アプリ]サブメニューを選択します。一部の電話では、このメニューの名前がアプリケーションマネージャなどのわずかに異なります。

  3. [すべてのアプリ]リストに右にスワイプします。実行中およびダウンロード済みのアプリのリストは無視してください。すべてのアプリのリストが必要です。

  4. 無効にするアプリを選択します。左上に強制停止のボタンがあり、右上に更新の無効化またはアンインストールのボタンがあるプロパティ画面が表示されます。

  5. データを削除します。


8
OPはプログラム的に言った。設定に移動してボタンを押すのはプログラムではありません
mmking 2015年

@mmking私はそれを知っていました。これは、データベースやテーブルやコンテンツを削除する最も簡単な方法です。彼はデータベースの作成をテストするためにそれが必要であり、これはそれを行うと言いました。私は同じことを探していて、それで解決しました。
f470071 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.