1

こんにちは、アプリケーションがバックグラウンドから戻るか、閉じた後に再度開くことによって、アプリケーションが起動するたびにデータベースを破棄する方法を見つけようとしています。問題は、アプリケーションを初めて実行しようとしたときに null が返され、アプリケーションがクラッシュすることです。

私のアプリケーション: ユーザーはログイン画面でプロンプトが表示され、データベースを作成し、別のアクティビティに移動してクエリを実行します。このアクティビティから、ユーザーはログインに戻ることはできず、電話のホーム画面にしか移動できません。ホーム画面に移動してアプリケーションを再度開くと、データベースを消去して、ユーザーがアプリケーションを初めて使用するように開始します。これはアプリケーションにとって実際には実用的ではないことはわかっていますが、これは単なる学習用です。

db.close()andcontext.deleteDatabase(db.getPath());onResumeandを実行しようとしましonRestartたが、これは常にアプリケーションをクラッシュさせます。'db.getPath()!=null' も確認しようとしましたが、これも役に立ちませんでした。

ありがとうございました

4

3 に答える 3

1

データベースを使用する最も実用的な方法ではないことを認識しているので、私はそれについてあなたを悩ませることはないと思います.

あなたがしたいのは、Resume() または Restart() の実行中にデータベースの内容を削除するメソッドを呼び出さないことです。実際には、Stop() を介して呼び出す必要があります。

使用したい方法は、

db.delete(String table, string whereClause, String [] whereArgs);

削除するテーブルの名前、つまり「user_food_database」を渡します。これは、すべての行を削除するため、この場合はnullになる whereclause であり、whereArgs の場合は null です。

公式ドキュメントは次のとおりです。

"データベース内の行を削除する便利な方法。

パラメータ table whereClause から削除するテーブル。削除時に適用するオプションの WHERE 句。null を渡すと、すべての行が削除されます。

whereClause が渡された場合は影響を受ける行数を返し、それ以外の場合は 0 を返します。すべての行を削除してカウントを取得するには、whereClause として「1」を渡します。"

次のように呼び出すこともできます。

deleteDatabase(File pathToDatabase)

データベースに複数のテーブルがある場合、データベース自体を毎回再作成するとコストがかかり、コンテンツのみを削除する方が良い場合があります。

于 2013-01-29T20:44:33.027 に答える
0

I suggest that you simply wipe the database, i.e., delete all data (or even drop the tables). This is not a direct answer to your question, but has the same effect.

于 2013-01-29T20:36:21.080 に答える
0

open()のメソッドですべてのテーブルを削除しSQLiteDatabaseHelper、 を呼び出してテーブルを再作成するだけonCreate(db)です。もちろん、アプリの起動ごとに 1 回だけデータベースを開いている場合にのみ機能します。

于 2013-01-29T20:39:35.500 に答える