2014-11-05 67 views
2

我想在我的应用程序中为用户提供一个选项以清除所有数据并重新开始。我已经尝试了一些东西,但似乎没有任何工作,因为数据仍然存在。这是我的第一次尝试:如何以编程方式删除Android Sqlite数据库

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

你确定表名是正确的吗?试着做没有'IF EXISTS'的execSQL,看看系统是否抛出异常 – rickyalbert 2014-11-05 19:06:38

+0

谢谢我试了一下,并且放了一些确认表被删除的日志语句,但是应用程序不会再重新启动,它崩溃了,不存在,我正在调查 – 2014-11-05 19:40:33

回答

4

最后这对我来说

首次下降工作和创建数据库

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

试试这个代码

SQLiteDatabase db = dbHelper.getWritableDatabase(); 

    count = db.delete("table_name", selection, selectionArgs); 
1

我想删除完整的DB文件的最佳和最简单的方法是context.deleteDatabase(DATABASE_NAME);

而在此之前,你必须关闭所有的数据库连接否则你必须重新启动应用程序。 希望这会帮助你

相关问题