Учебное пособие «Блокнот»: функция deleteDatabase ()

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);
}

Но теперь мне нужно перезапустить приложение, которое удалено из базы данных. Я не работаю во время работы приложения.

Теги:
database
sqlite3
notepad

2 ответа

3

Метод delete, который вы используете из объекта SQLiteDatabase, - это удаление таблиц, а не базы данных.

Посмотрите на метод delete в Context

Edit:

Попробуйте напрямую позвонить из своей деятельности:

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

То, как вы звоните на данный момент, - это удалить базу данных из объекта SQLliteDatabase, поэтому я думаю, что она не будет удалять базу данных до тех пор, пока на ней больше нет ссылок.

  • 0
    ой ну спасибо. Я изменил метод удаления: public boolean deleteDatabase (Context context) {return context.deleteDatabase (DATABASE_NAME); }. Теперь база данных действительно будет удалена, но не до тех пор, пока я не закрою свое приложение. Если закрыть приложение и запустить его заново, база данных действительно будет удалена. Что я делаю не так?
  • 0
    +1 Ты побил меня к этому :)
Показать ещё 4 комментария
0

В документации по Android метод удаления удаляет строки из таблицы в базе данных. Он не удаляет саму базу данных.

Я считаю, что вы хотите вместо этого Context.deleteDatabase

Ещё вопросы

Сообщество Overcoder
Наверх
Меню