当前位置: 首页 > 知识库问答 >
问题:

创建新表时房间迁移查询失败

越星晖
2023-03-14

找到:TableInfo{name='news',Columns={alias=Column{name='alias',Type='text',affinity='2',notnull=false,PrimaryKeyPosition=0,DefaultValue='null'},Selected=Column{name='select',Type='integer',affinity='3',notnull=true,PrimaryKeyPosition=0,DefaultValue='null'},Link=Column{name='link',Type='text',affinity='2',notnull=false,PrimaryKeyPosition=0,列{name='guid',type='text',affinity='2',notnull=false,primarykeyposition=0,defaultvalue='null'},site=column{name='site',type='text',affinity='2',notnull=false,primarykeyposition=0,defaultvalue='null'},date=column{name='date',type='integer',affinity='3',notnull=true,primarykeyposition=0,defaultvalue='null'},topic_url=column{,affinity='2',notnull=false,primarykeyposition=0,defaultvalue='null'},section_url=column{name='section_url',type='text',affinity='2',notnull=false,primarykeyposition=0,defaultvalue='null'},num_photo=column{name='num_photo',type='text',affinity='2',notnull=false,primaryKeyPosition=0,defaultValue='null'},section_guid=column{name='section_guid',type='text',affinity='2',notnull=false,primaryKeyPosition=0,default 09-12 19:06:48.734 616 5-6190/com.ngerancang.cacheapipaging e/eglcodecommon:glutilsparamsize:unknow param 0x00008cdf 09-12 19:06:48.735 616 5-6190/com.ngerancang.cacheapipaging e/eglcodece通用:glutilsparamsize:unknow参数0x00008824

我的模型类看起来是这样的

@Entity(tableName = "news")
data class News(
    @PrimaryKey(autoGenerate = true)
    var id : Int = 0,
    val alias: String?=null,
    @ColumnInfo(name = "content_type")
    @SerializedName("content_type")
    val contentType: String?=null,
    @ColumnInfo(name = "data_source")
    @SerializedName("data_source")
    val dataSource: String?=null,
    val date: Long?=null,
    val dateAgo: String?=null,
    val guid: String?=null,
    val link: String?=null,
    val photo: String?=null,
    val pubDate: String?=null,
    @ColumnInfo(name = "section_guid")
    @SerializedName("section_guid")
    val sectionGuid: String?=null,
    @ColumnInfo(name = "section_title")
    @SerializedName("section_title")
    val sectionTitle: String?=null,
    @ColumnInfo(name = "section_url")
    @SerializedName("section_url")
    val sectionUrl: String?=null,
    val site: String?=null,
    val thumb: String?=null,
    val title: String?=null,
    val topic: String?=null,
    @ColumnInfo(name = "topic_guid")
    @SerializedName("topic_guid")
    val topicGuid: String?=null,
    @ColumnInfo(name = "topic_url")
    @SerializedName("topic_url")
    val topicUrl: String?=null,
    val youtube: String?=null,
    @ColumnInfo(name = "num_photo")
    @SerializedName("num_photo")
    val numPhoto: String?=null,
    var selected: Boolean = false
)

我的数据库抽象类

@Database(entities = [Recipe::class, News::class], version = 2, exportSchema = true)
@TypeConverters(Converters::class)
abstract class AppDatabase : RoomDatabase(){

    abstract fun recipeDao() : RecipeDao

    abstract fun newsDao() : NewsDao

    companion object{

        private val MIGRATION_1_2 : Migration = object : Migration(1, 2){
            override fun migrate(database: SupportSQLiteDatabase) {

                val sql = "CREATE TABLE IF NOT EXISTS `news` (`id` INTEGER NOT NULL, `alias` TEXT, `date` INTEGER NOT NULL, " +
                        "`guid` TEXT, `content_type` TEXT, `data_source` TEXT, `dateAgo` TEXT, `link` TEXT, `photo` TEXT, " +
                        "`pubDate` TEXT, `section_guid` TEXT, `section_title` TEXT, `section_url` TEXT, `site` TEXT, " +
                        "`thumb` TEXT, `title` TEXT, `topic` TEXT, `topic_guid` TEXT, `topic_url` TEXT," +
                        " `num_photo` TEXT, `youtube` TEXT, " +
                        " `selected` INTEGER NOT NULL, PRIMARY KEY(`id`));"
                Log.d("SQL", sql)
                database.execSQL(sql)
            }

        }

        @Volatile
        private var instance: AppDatabase? = null

        fun getDatabase(context: Context): AppDatabase{
            val tempInstance = instance
            if(tempInstance != null){
                return tempInstance
            }

            synchronized(AppDatabase::class.java){
                val dbInstance = Room.databaseBuilder(context,
                AppDatabase::class.java, "recipe-db")
                    .addMigrations(MIGRATION_1_2)
                    .build()

                instance = dbInstance
                return dbInstance
            }

        }
    }
}

我花了几个小时还是没有得到解决办法。我的迁移查询有什么问题?

共有1个答案

曹浩波
2023-03-14

我发现我的问题是因为

预期

date=Column{name='date', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='null'}

我所做的是

date=Column{name='date', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'},
 类似资料:
  • https://medium . com/Google-developers/understanding-migrations-with-room-f01e 04 b 07929上有一篇关于房间迁移的很棒的文章 然而,我仍然错过了房间中的“灾难”恢复机制(例如,当发生异常情况时,将清除并重新创建数据库的fallbackToDestructiveRecreationOnMigrationError(

  • 并且我发现了基于数据库版本4的可能场景的迁移varargs。 我的问题是,假设我使用的是db v1的Room,当我的应用程序到达db v10时,我将不得不编写多少迁移方法? 在sqlite中,我们在中获得已安装应用程序的当前db版本,我们只需通过开关大小写而不使用break语句,以便满足所有db升级。

  • 我在存钱 进入我的房间数据库版本1。 现在我需要将

  • 有没有办法告诉flyway在不应用迁移的情况下重新创建flyway表。例如,查看迁移文件夹中的脚本,假设它们都已应用,并简单地确保flyway表包含所有脚本。 我们的方案是,我们不允许在生产和(ISO;银行、认证)原因。规则说我们需要完全删除表。因此,当我们从生产副本重置测试环境时,我们需要重新创建飞行道表。现在,我们从现有的测试环境中复制和粘贴,但有时这与生产不同步,并且会发生各种问题。 因此,

  • 获取以下异常: 预期: TableInfo{name='chat_table',Columns={message=column{name='message',type='text',affinity='2',notnull=false,primarykeyposition=0},messageStatus=column{name='message status',type='text',affin

  • 我正在使用flyway数据库迁移工具和一个spring boot jpa项目。当我第一次运行服务器时,flyway希望迁移SQL,但表还没有创建。在这种情况下,flyway返回一个错误,该错误类似 spring.flyway.baseline-on-migrate=true spring.flyway.enabled=true spring.flyway.clean-on-validation-e