我正在尝试在我的应用程序中提供一个选项,供用户清除所有数据并重新开始。我尝试过一些东西,但似乎没有一个在数据仍然存在的意义上。这是我的第一次尝试:
public void clearDatabase(Context context) {
DatabaseHelper helper = new DatabaseHelper(context);
SQLiteDatabase database = helper.getWritableDatabase();
database.delete(Constants.TRANSACTION_TABLE, null, null); //erases everything in the table.
database.delete(Constants.CUSTOMER_TABLE, null, null);
database.delete(Constants.RETAILER_TABLE, null, null);
database.close();
}
这似乎有效,但随后重启时应用会崩溃。
然后我在SQliteOpenHelper子类
中尝试这个 public void resetDatabase() {
SQLiteDatabase database = getWritableDatabase();
database.execSQL("DROP TABLE IF EXISTS customer_table");
database.execSQL("DROP TABLE IF EXISTS transaction_table");
database.execSQL("DROP TABLE IF EXISTS retailer_table");
database.execSQL(CREATE_CUSTOMER_TABLE);
database.execSQL(CREATE_TRANSACTION_TABLE);
database.execSQL(CREATE_RETAILER_TABLE);
database.close();
}
这不会在重启时崩溃,但数据仍然存在。唯一有效的是我以编程方式更改版本号。但是当我从IDE运行应用程序时,它将具有较旧的版本号,并且应用程序将无法启动,因为设备上的版本号高于代码中的版本号。
我还能尝试什么?
答案 0 :(得分:5)
最后这对我有用
首先删除并创建数据库
public void resetDatabase() {
SQLiteDatabase database = getWritableDatabase();
database.execSQL("DROP TABLE IF EXISTS " + Constants.CUSTOMER_TABLE);
database.execSQL("DROP TABLE IF EXISTS " + Constants.TRANSACTION_TABLE);
database.execSQL("DROP TABLE IF EXISTS " + Constants.RETAILER_TABLE);
database.execSQL(CREATE_CUSTOMER_TABLE);
database.execSQL(CREATE_TRANSACTION_TABLE);
database.execSQL(CREATE_RETAILER_TABLE);
database.close();
}
然后重新启动从此问题借来的应用how to programmatically "restart" android app?
public static void resetApp() {
sDatabase.resetDatabase();
preferenceEditor.clear();
preferenceEditor.commit();
Intent mStartActivity = new Intent(sContext, MainActivity.class);
int mPendingIntentId = 123456;
PendingIntent mPendingIntent = PendingIntent.getActivity(sContext, mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager mgr = (AlarmManager)sContext.getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent);
System.exit(0);
}
答案 1 :(得分:2)
我认为删除完整数据库文件的最佳和最简单方法是context.deleteDatabase(DATABASE_NAME);
但在此之前您必须关闭所有数据库连接,否则您必须重新启动应用程序。 希望这会对你有所帮助
答案 2 :(得分:1)
试用此代码
SQLiteDatabase db = dbHelper.getWritableDatabase();
count = db.delete("table_name", selection, selectionArgs);