2014-11-05 61 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);

而在此之前,你必須關閉所有的數據庫連接否則你必須重新啓動應用程序。 希望這會幫助你

相關問題