Intereting Posts
Просмотр списка Android в прокрутке Android Studio не может запускать git, хотя на самом деле может Отладка статической библиотеки Android NDK (слияние проектов?) Получение представления, которое получает все события касания OpenAllWhitelistURLsInWebView для Android в Кордове / Phonegap Запрос API Google Places запрещен для автозаполнения Android, даже с правом ключом api «Не может найти ссылочный класс» с Proguard и Kotlin Как я могу найти ориентацию изображения, сделанного с помощью Intent MediaStore.ACTION_IMAGE_CAPTURE? Панель действий с функцией поиска. Проблемы обратной совместимости Общие с ArrayAdapters Как заблокировать ориентацию приложения Android в портретном режиме? Android studio Execution failed for task ': app: packageAllDebugClassesForMultiDex' Android AsyncTask Индикатор выполнения IOS и Android Algorithm или библиотека для оперения краев изображений, похожих на фотошоп Как решить, когда запускать различные компоненты приложений Android в отдельном процессе

Как я могу очистить базу данных SQLite при каждом запуске приложения?

Я хочу, чтобы мой экземпляр базы данных SQLite был уничтожен при запуске программы.

То, что я пробовал, это сделать метод в моем классе MyDBAdapter.java следующим образом:

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

Каков наилучший способ сделать это?

Solutions Collecting From Web of "Как я могу очистить базу данных SQLite при каждом запуске приложения?"

Помимо onCreate() и onUpgrade() вы можете переопределить onOpen() . Отбросьте все таблицы и вызовите onCreate() .

 public class MyApplication extends Application { protected static final String LOG_TAG = "MyApplication"; private static DatabaseAdapter mDb; private static MyApplication mInstance; /** * @return The instance of the database adapter. */ public static DatabaseAdapter getDatabaseAdapter() { return mDb; } /** * @return The instance of the application. */ public static Context getInstance() { return mInstance; } @Override public void onCreate() { super.onCreate(); Log.w(LOG_TAG, "Application::onCreate"); mInstance = this; mDb = new DatabaseAdapter(); } @Override public void onTerminate() { // Close the internal db getDatabaseAdapter().close(DatabaseAdapter.INTERNAL); Log.e(LOG_TAG, "::onTerminate::"); super.onTerminate(); } } 

Преимущество приложения подкласса заключается в том, что это будет вызываться всегда, когда ваше приложение запускается или завершается. Независимо от начатой ​​деятельности. Здесь следует разместить глобальные операции, такие как открытие / закрытие базы данных.

Документация:

Базовый класс для тех, кто должен поддерживать глобальное состояние приложения. Вы можете предоставить свою собственную реализацию, указав ее имя в теге AndroidManifest.xml, что приведет к тому, что этот класс будет создан для вас, когда будет создан процесс для вашего приложения / пакета.

Быстрое и простое решение, которое я использовал, это удалить файл базы данных в методе OnCreate() , вызвав другой метод с именем doDBCheck() . doDBCheck() ищет файл в файловой системе эмулятора / телефона, и если он существует, удалите его.

  private static final String DB_PATH = "data/data/<package name here>/databases/<db name>"; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mainView = (TextView) findViewById(R.id.mainView); doDBCheck(); } private void doDBCheck() { try{ File file = new File(DB_PATH); file.delete(); }catch(Exception ex) {} } 

Используйте флаг in-memory, поэтому нет необходимости его очищать.

Существует метод, который можно использовать для указания SQLiteDatabase для простого удаления одной из баз данных следующим образом:

 context.deleteDatabase(DATABASE_NAME); 

Вам нужен Контекст и имя вашей базы данных для удаления.

Вы можете вставить это в свой конструктор, который подключается к базе данных SQLite.

Дополнительная информация: как удалить базу данных в sqlite?