我正在使用Room API在我的Android应用程序中实现一个数据库。似乎每次我加载我的应用程序时,它都会尝试一遍又一遍地创建数据库。有没有办法限制这个问题的发生?
db = Room.databaseBuilder(context, AppDatabase.class, "database-name").build();
我正在使用Room API在我的Android应用程序中实现一个数据库。似乎每次我加载我的应用程序时,它都会尝试一遍又一遍地创建数据库。有没有办法限制这个问题的发生?
db = Room.databaseBuilder(context, AppDatabase.class, "database-name").build();
private static boolean doesDatabaseExist(Context context, String dbName) {
File dbFile = context.getDatabasePath(dbName);
return dbFile.exists();
}
当你创建数据库时,应用程序启动时会调用数据库onCreate()
回调。你可以在应用程序活动中使用以下代码,并且在清单文件中的应用程序类调用该活动,如下所示:
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"
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接口
@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");
}