1

我对 android 网站上的记事本教程有一个简短的问题。我在教程代码中写了一个简单的函数来删除整个数据库。它看起来像这样:

数据助手.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 无法访问数据库。

非常感谢。

菲利克斯


谢谢你的帖子。现在我更新了代码:

数据助手.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

delete您从SQLiteDatabase对象使用的方法是删除表,而不是数据库。

看一下Contextdelete中的方法

编辑:

尝试直接从您的活动中调用:

@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 回答