How to check if a DB exists in Android?

后端 未结 4 550
广开言路
广开言路 2021-01-19 15:05

I am using Room API to implement a DB in my Android app. It seems that every time I load my app it tries to create the database again and again. Is there any way to restrict

相关标签:
4条回答
  • 2021-01-19 15:21

    Try this

    if (!db.exists()) {
        // Database does not exist so copy it from assets here
        Log.i("Database", "Not Found");
    } else {
        Log.i("Database", "Found");
    }
    
    0 讨论(0)
  • 2021-01-19 15:22

    You are using db that is, in fact, a file. You can check, if it exists, this method could be helpful:

    private static boolean doesDatabaseExist(Context context, String dbName) {
        File dbFile = context.getDatabasePath(dbName);
        return dbFile.exists();
    }
    
    0 讨论(0)
  • 2021-01-19 15:35

    You can get count of entities in db (TODO app - example). entities > 0.

    class App: Application() {
        override fun onCreate() {
            super.onCreate()
            instance = this
            database = Room.databaseBuilder(applicationContext,
                AppDatabase::class.java, "database").build()
        }
        companion object {
            lateinit var instance: App
            lateinit var database: AppDatabase
        }
    }
    

    //DB class

     @Database(entities = [Task::class], version = 1, exportSchema = false)
           abstract class AppDatabase : RoomDatabase() {
           abstract fun taskDao(): TaskDao
    }
    

    //Dao interface

       @Dao
        interface TaskDao {
            @Query("SELECT COUNT(id) FROM tasks")
            fun getTasksCount(): Int
        }
    

    //Model

    @Entity(indices = [Index(value = ["title"], unique = true)], tableName ="tasks")
        class Task(
            var title: String = "",
            var description: String = "",
            var date: Date,
            @Embedded 
            var remind: Constants.RemindPeriod = Constants.RemindPeriod.MIN5,
            @Embedded
            var prior: Priority) : Serializable {
            @PrimaryKey(autoGenerate = true)
            var id: Long = 0}
    

    //CheckDB

     private fun checkDatabaseState() {
            doAsync {
                val db = App.database
                val entityCount = db.taskDao().getTasksCount().or(0)
                isDatabaseNotEmpty = entityCount > 0
            }
        }  
    
    0 讨论(0)
  • 2021-01-19 15:47

    when you create database it call when application start that time their db create.you used to below code in app activity and that activity call in manifest file in application class call like used below code ..

    public class AppActivity extends Application {
    
    AppDatabase db;
    
    @Override
    public void onCreate() {
        super.onCreate();
        db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").build();
    }
    
    public AppDatabase getDatabase() {
        return db;
    }
    

    } and add below line manifest file .. add below line in application tag

            android:name="AppActivity"
    
    0 讨论(0)
提交回复
热议问题