簡體   English   中英

如何檢查Android中是否存在數據庫?

[英]How to check if a DB exists in Android?

我正在使用 Room API 在我的 Android 應用程序中實現一個數據庫。 似乎每次我加載我的應用程序時,它都會嘗試一次又一次地創建數據庫。 有什么辦法可以限制這個嗎?

 db = Room.databaseBuilder(context, AppDatabase.class, "database-name").build();

您正在使用 db 實際上是一個文件。 您可以檢查,如果它存在,此方法可能會有所幫助:

private static boolean doesDatabaseExist(Context context, String dbName) {
    File dbFile = context.getDatabasePath(dbName);
    return dbFile.exists();
}

當您創建數據庫時,它會在應用程序啟動時調用,那時他們的數據庫創建。您曾經在應用程序活動中使用下面的代碼,並且在應用程序類調用的清單文件中調用該活動,就像下面的代碼一樣。

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

} 並添加以下行清單文件.. 在應用程序標簽中添加以下行

        android:name="AppActivity"

您可以獲得數據庫中的實體計數(TODO 應用程序 - 示例)。 實體 > 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
    }
}

//數據庫類

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

//道接口

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

//模型

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

//查詢數據庫

 private fun checkDatabaseState() {
        doAsync {
            val db = App.database
            val entityCount = db.taskDao().getTasksCount().or(0)
            isDatabaseNotEmpty = entityCount > 0
        }
    }  

試試這個

if (!db.exists()) {
    // Database does not exist so copy it from assets here
    Log.i("Database", "Not Found");
} else {
    Log.i("Database", "Found");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM