Учебное пособие «Блокнот»: функция deleteDatabase () - PullRequest
1 голос
/ 25 декабря 2010

У меня короткий вопрос к учебнику по блокнотам на сайте 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);
}

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

Ответы [ 2 ]

3 голосов
/ 25 декабря 2010

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

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

Редактировать:

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

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

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

0 голосов
/ 25 декабря 2010

Согласно документации для Android , метод delete удаляет строки из таблицы в базе данных.Он не удаляет саму базу данных.

Я считаю, что вместо этого вам нужно: Context.deleteDatabase

...