1

Android ウェブサイトのメモ帳チュートリアルに短い質問があります。データベース全体を削除する簡単な関数をチュートリアル コードに記述しました。次のようになります。

DataHelper.java

public void deleteDatabase() {
    this.mDb.delete(DATABASE_NAME, null, null);
}

Notepadv1.java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    boolean result = super.onCreateOptionsMenu(menu);
    menu.add(0, DELETE_ID, 0, "Delete whole Database");
    return result;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {     
    case DELETE_ID:
        mDbHelper.deleteDatabase();      
        return true;
    }       
    return super.onOptionsItemSelected(item);
}

しかし、アプリを実行してデータベースを削除しようとすると、LogCat で次のエラーが発生します。

sqlite が返されました: エラー コード = 1、msg= そのようなテーブルはありません: データ

この問題を解決する方法を教えてください。関数 deleteDatabase がデータベースに到達できないようです。

どうもありがとうございました。

フェリックス


投稿ありがとうございます。今私はコードを更新しました:

DataHelper.java

public boolean deleteDatabase(Context context) {
    return context.deleteDatabase(DATABASE_NAME);
}

Notepadv1.java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    boolean result = super.onCreateOptionsMenu(menu);
    menu.add(0, DELETE_ID, 0, "Delete whole Database");
    return result;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {     
    case DELETE_ID:
        mDbHelper.deleteDatabase(this);      
        return true;
    }       
    return super.onOptionsItemSelected(item);
}

しかし、データベースが削除されたアプリを再起動する必要があります。アプリの実行中は作業していません。

4

2 に答える 2

3

SQLiteDatabaseオブジェクトdeleteから使用している方法はデータベースではなくテーブルを削除することです。

コンテキストdeleteのメソッドを見てください

編集:

アクティビティから直接呼び出してみてください:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {     
    case DELETE_ID:
        deleteDatabase(DATABASENAME);      
        return true;
    }       
    return super.onOptionsItemSelected(item);
}

現時点で呼び出している方法は、SQLliteDatabaseオブジェクトからデータベースを削除することなので、データベースへの参照がなくなるまでデータベースを削除しないと思います。

于 2010-12-25T08:52:05.923 に答える
0

Android のドキュメントによると、delete メソッドはデータベース内のテーブルから行を削除します。データベース自体は削除されません。

代わりに必要なのはContext.deleteDatabaseだと思います

于 2010-12-25T08:56:47.443 に答える