我对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=没有这样的表:data
你能帮忙解决这个问题吗?函数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);
}

但是现在我必须重新启动数据库被删除的应用程序。应用程序运行时我不工作。

最佳答案

SQLiteDatabase对象使用的delete方法是删除表,而不是数据库。
查看Context中的delete方法
编辑:
尝试从您的活动直接拨打:

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

您现在调用的方法是从SQLliteDatabase对象中删除一个数据库,所以我猜在没有对它的更多引用之前,它不会删除该数据库。

07-25 23:01
查看更多