Comment puis-je supprimer une base de données SQLite chaque fois que je lance mon application?

Je veux que ma base de données SQLite instance d'essuyer lorsque le programme démarre.

Ce que j'ai essayé était de faire une méthode de ma classe MyDBAdapter.java comme ceci:

public class MyDbAdapter {
private static final String TAG = "NotesDbAdapter";
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
private static final String DATABASE_NAME = "gpslocdb";
private static final String PERMISSION_TABLE_CREATE = "CREATE TABLE permission ( fk_email1 varchar, fk_email2 varchar, validated tinyint, hour1 time default '08:00:00', hour2 time default '20:00:00', date1 date, date2 date, weekend tinyint default '0', fk_type varchar, PRIMARY KEY  (fk_email1,fk_email2))";
private static final String USER_TABLE_CREATE = "CREATE TABLE user ( email varchar, password varchar, fullName varchar, mobilePhone varchar, mobileOperatingSystem varchar, PRIMARY KEY  (email))";
private static final int DATABASE_VERSION = 2;
private final Context mCtx;
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(PERMISSION_TABLE_CREATE);
db.execSQL(USER_TABLE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS user");
db.execSQL("DROP TABLE IF EXISTS permission");
onCreate(db);
}
}
/**
* Constructor - takes the context to allow the database to be
* opened/created
* 
* @param ctx the Context within which to work
*/
public MyDbAdapter(Context ctx) {
this.mCtx = ctx;
}
/**
* Open the database. If it cannot be opened, try to create a new
* instance of the database. If it cannot be created, throw an exception to
* signal the failure
* 
* @return this (self reference, allowing this to be chained in an
*         initialization call)
* @throws SQLException if the database could be neither opened or created
*/
public MyDbAdapter open() throws SQLException {
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
}
public void close() {
mDbHelper.close();
}
public long createUser(String email, String password, String fullName, String mobilePhone, String mobileOperatingSystem) 
{
ContentValues initialValues = new ContentValues();
initialValues.put("email",email);
initialValues.put("password",password);
initialValues.put("fullName",fullName);
initialValues.put("mobilePhone",mobilePhone);
initialValues.put("mobileOperatingSystem",mobileOperatingSystem);
return mDb.insert("user", null, initialValues);
}
public Cursor fetchAllUsers() {
return mDb.query("user", new String[] {"email", "password", "fullName", "mobilePhone", "mobileOperatingSystem"}, null, null, null, null, null);
}
public Cursor fetchUser(String email) throws SQLException {
Cursor mCursor = mDb.query(true, "user", new String[] {"email", "password", "fullName", "mobilePhone", "mobileOperatingSystem"}
, "email" + "=" + email, null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
public List<Friend> retrieveAllUsers() 
{
List <Friend> friends=new ArrayList<Friend>();
Cursor result=fetchAllUsers();
if( result.moveToFirst() ){
do{
//note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));
friends.add(new Friend(result.getString(result.getColumnIndexOrThrow("email")), "","","",""));
}while( result.moveToNext() );
}
return friends;
}
}

Quelle est la meilleure façon de le faire?

  • Être très prudent sur la façon dont vous aller à ce sujet. L'activité qui sert de porte d'entrée pour votre application peut être déchirée vers le bas et re-créé plusieurs fois au cours de ce que l'utilisateur considère comme sa "durée de vie", et la suppression de la base de données prématurément va conduire à toutes sortes de confusion. Puis-je demander ce qui a poussé votre décision d'effacer toutes les données lorsque l'application démarre?
  • ne vous inquiétez pas, je dois effacer la base de données chaque fois que j'ouvre l'application, car j'ai à remplir à partir de zéro avec la distance de la base de données
  • Comment êtes-vous identifier lors de l'application "s'ouvre" et lorsqu'il est simplement ramené à partir de l'arrière-plan? Comme d'autres l'ont dit, il suffit de naviguer à travers une activité à ne pas fermer une application, ce qui ne garantit pas que lorsque vous lancez une application à partir de son icône que vous êtes en train de lancer une nouvelle instance. Le comportement que vous besoin n'est pas en accord avec le cycle de vie d'une application Android. Vous avez besoin d'abstraire l'extraction et de la compensation de vos données n'est pas strictement liée au cycle de vie des applications.