2014-11-05 6 views
2

Я пытаюсь предоставить опцию в своем приложении для пользователя, чтобы стереть все данные и начать заново. Я пробовал несколько вещей, но никто не работает в том смысле, что данные все еще существуют. Вот моя первая попытка:Как удалить базу данных Android Sqlite Programmatically

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

Вы точно знаете, что названия таблиц верны? Попробуйте сделать execSQL без «IF EXISTS» и посмотреть, генерирует ли система исключение – rickyalbert

+0

Спасибо, я попробовал его и поместил некоторый оператор регистрации, который подтвердил, что таблицы удаляются, однако приложение не будет перезагружаться снова, оно вылетает из-за того, что таблицы не существует, я изучаю –

ответ

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

Я думаю, что лучший и самый простой способ, чтобы удалить весь файл БД context.deleteDatabase(DATABASE_NAME);

но перед этим вы должны закрыть все подключения DB еще вы должны перезапустить приложение. Надеюсь, это вам поможет

Смежные вопросы