根据文档,来自room.databaseBuilder()
的room实例应该保存的数据是persist。但还是迷路了。我的项目必须数据库
@database(实体=[foodmodel::class],version=4,exportSchema=false)抽象类FoodDatabase:RoomDatabase(){
abstract val foodDatabaseDao: FoodDatabaseDao
companion object {
@Volatile
private var INSTANCE: FoodDatabase? = null
fun getInstance(context: Context): FoodDatabase {
synchronized(this) {
var instance = INSTANCE
if (instance == null) {
instance = Room.databaseBuilder(
context.applicationContext,
FoodDatabase::class.java,
Constants.OVERVIEW_FOOD_DATABASE
)
.fallbackToDestructiveMigration()
.build()
INSTANCE = instance
}
return instance
}
}
}
第二数据库
@Database(entities = [MyFoodModel::class], version = 3, exportSchema = false)
抽象类MyFoodDatabase:RoomDatabase(){abstract val MyFoodDatabaseDao:MyFoodDatabaseDao
companion object {
@Volatile
private var INSTANCE: MyFoodDatabase? = null
fun getInstance(context: Context): MyFoodDatabase {
synchronized(this) {
var instance = INSTANCE
if (instance == null) {
instance = Room.databaseBuilder(
context.applicationContext,
MyFoodDatabase::class.java,
Constants.OVERVIEW_FOOD_DATABASE
)
.fallbackToDestructiveMigration()
.build()
INSTANCE = instance
}
return instance
}
}
}
}
@Dao
interface MyFoodDatabaseDao {
@Insert
fun insert(food: MyFoodModel)
@Query("SELECT * FROM MyFoodItems ORDER BY name DESC")
fun getAllFood(): LiveData<List<MyFoodModel>>
@Delete
fun deleteFood(foodModel: MyFoodModel)
}
@Dao
interface MyFoodDatabaseDao {
@Insert
fun insert(food: MyFoodModel)
@Query("SELECT * FROM MyFoodItems ORDER BY name DESC")
fun getAllFood(): LiveData<List<MyFoodModel>>
@Delete
fun deleteFood(foodModel: MyFoodModel)
}
一个android应用程序可以有多个数据库。
如我所见,您为两个数据库[MyFoodDatabase,FoodDatabase]提供了相同的名称[constants.overview_food_database]。因此所有值都将写入一个名为constants.overview_food_database的数据库中。
请同时提供数据库的不同名称,然后重试。
正如您所说的,您正在使用相同数据库的两个不同实例,并且对于每个数据库实例,您都在更改数据库版本,但您没有将数据库迁移到该版本。相反,您使用的是fallbackToDestructiveMigration(),它不会使数据库崩溃,但在找到任何现有版本时清除数据。
请尝试以下步骤:
val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
// do nothing because you are not altering any table
}
}
val MIGRATION_2_1 = object : Migration(2, 1) {
override fun migrate(database: SupportSQLiteDatabase) {
// do nothing because you are not altering any table
}
}
但最好使用单个数据库实例,并在注释中包含与数据库关联的实体列表。因为room数据库实例非常昂贵。
https://developer.android.com/training/data-storage/room
注意:如果您的应用程序在单个进程中运行,那么在实例化AppDatabase对象时应该遵循singleton设计模式。每个RoomDatabase实例都相当昂贵,您很少需要访问单个进程中的多个实例。
Spring Boot版本为1.5.6 使用的数据库是SQL Server2016,它也是在docker(windows容器)上。 问题:每当我重新启动SQL DB容器时,应用程序开始给出这个错误。 任何想法可以做什么来解决这个问题。 多谢了。
当我从Android Studio运行时是正常的 但当我关闭并重新打开应用程序时,我得到了错误 IllegalStateException:Room无法验证数据完整性。看起来您已经更改了架构,但忘记更新版本号。您可以通过增加版本号来解决这个问题。 我的第二张桌子
我们有一个Java应用程序,它使用Quartz来调度作业。我们使用的quartz版本是:Quartz-2.2.1 quartz配置使用JDBC作业存储。 如果在quartz scheduler对象上调用start方法时数据库连接关闭(由于断断续续的网络故障),它将以以下异常失败: 为了确保quartz scheduler成功启动,我们在代码中添加了重试,它在每1秒后调用quartz schedul
正在为%1请求的包运行增量备份。Package@pm@with result:Success Package com.example.myapplication3 with result:Success备份已完成with 当我重新安装应用程序时,它不还原,当我使用令牌和包名并强制在adb中还原时,它也不还原,而是给我: 我觉得RestoreStarting:0包中的错误一定很明显,但我在网上找不到
docker合成文件:
我想在应用程序启动时使用Spring ehCache将数据从数据库加载到缓存中,即在调用任何其他方法之前服务器启动时。我不想使用构造函数。请帮帮我。