热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何以编程方式删除AndroidSqlite数据库

我试图在我的应用程序中提供一个选项,供用户擦除所有数据并重新开始.我尝试过一些东西,但似乎没有一个在数据仍然存在的意义上.这是我的第一次尝试:publicvoidclearData

我试图在我的应用程序中提供一个选项,供用户擦除所有数据并重新开始.我尝试过一些东西,但似乎没有一个在数据仍然存在的意义上.这是我的第一次尝试:

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运行应用程序时,它将具有较旧的版本号,并且应用程序将无法启动,因为设备上的版本号高于代码中的版本号.

我还能尝试什么?

解决方法:

最后这对我有用

首先删除并创建数据库

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);
}


推荐阅读
author-avatar
mobiledu2502930381
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有