我对android网站上的记事本教程有一个简短的问题。我在教程代码中编写了一个简单的函数来删除整个数据库。它看起来像这样:
public void deleteDatabase() {
this.mDb.delete(DATABASE_NAME, null, null);
}
@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无法访问数据库。
非常感谢。
菲利克斯
感谢您的帖子。现在我更新了代码:
public boolean deleteDatabase(Context context) {
return context.deleteDatabase(DATABASE_NAME);
}
@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);
}
但现在我必须重新启动数据库被删除的应用程序。在应用程序运行时我没有工作。
答案 0 :(得分:3)
您在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
对象中删除数据库,所以我猜它不会丢弃数据库,直到没有更多的引用它为止。
答案 1 :(得分:0)
根据android documentation,delete方法从数据库中的表中删除行。它不会删除数据库本身。
我相信你想要的是Context.deleteDatabase