package adonai.diary_browser.database; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.support.annotation.NonNull; import android.util.Log; import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; import com.j256.ormlite.dao.RuntimeExceptionDao; import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.table.TableUtils; import java.sql.SQLException; import adonai.diary_browser.entities.AutocompleteItem; import adonai.diary_browser.entities.CredentialsItem; /** * Helper class for managing OrmLite database and DAOs * * @author Adonai */ public class PersistManager extends OrmLiteSqliteOpenHelper { private static final String TAG = PersistManager.class.getSimpleName(); private static final String DATABASE_NAME ="diaryDB"; private static final int DATABASE_VERSION = 6; //Dao fast access links private RuntimeExceptionDao<AutocompleteItem, Long> mAutocompleteDao; private RuntimeExceptionDao<CredentialsItem, String> mCredentialsDao; public PersistManager(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource, AutocompleteItem.class); TableUtils.createTable(connectionSource, CredentialsItem.class); } catch (SQLException e) { Log.e(TAG, "error upgrading DB " + DATABASE_NAME); throw new RuntimeException(e); } } @Override public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVer, int newVer) { try { switch (oldVer) { case 4: // У нас уже есть таблица автокомплита (non-ormlite) TableUtils.createTable(connectionSource, CredentialsItem.class); case 5: // структура изменена, пересоздаём таблицу TableUtils.dropTable(connectionSource, CredentialsItem.class, true); TableUtils.createTable(connectionSource, CredentialsItem.class); } } catch (SQLException e) { Log.e(TAG, "error upgrading DB " + DATABASE_NAME); throw new RuntimeException(e); } } @NonNull public RuntimeExceptionDao<CredentialsItem, String> getCredentialsDao() { if (mCredentialsDao == null) { mCredentialsDao = getRuntimeExceptionDao(CredentialsItem.class); } return mCredentialsDao; } @NonNull public RuntimeExceptionDao<AutocompleteItem, Long> getAutocompleteDao() { if (mAutocompleteDao == null) { mAutocompleteDao = getRuntimeExceptionDao(AutocompleteItem.class); } return mAutocompleteDao; } public void clearAllTables() { try { TableUtils.clearTable(DbProvider.getHelper().getConnectionSource(), AutocompleteItem.class); TableUtils.clearTable(DbProvider.getHelper().getConnectionSource(), CredentialsItem.class); } catch (SQLException e) { throw new RuntimeException(e); } } @Override public void close() { super.close(); } }