Android 创建新表时,文件室迁移查询失败

Android 创建新表时,文件室迁移查询失败,android,kotlin,android-sqlite,android-room,Android,Kotlin,Android Sqlite,Android Room,我的房间迁移问题是什么?有人能看到这个吗 java.lang.IllegalStateException:迁移未正确处理: 新闻(com.ngerancang.cacheapipage.model.news) 预期: TableInfo{name='news',columns={alias=Column{name='alias',type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},se

我的房间迁移问题是什么?有人能看到这个吗

java.lang.IllegalStateException:迁移未正确处理: 新闻(com.ngerancang.cacheapipage.model.news)

预期: TableInfo{name='news',columns={alias=Column{name='alias',type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},selected=列{name='selected',type='INTEGER', affinity='3',notNull=true,primaryKeyPosition=0, defaultValue='null'},link=列{name='link',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},guid=列{name='guid',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},site=列{name='site',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},日期=列{name='date',type='INTEGER', affinity='3',notNull=false,primaryKeyPosition=0, defaultValue='null'},topic\u url=列{name='topic\u url',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},section\u url=列{name='section\u url', type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},num_photo=列{name='num_photo',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},section\u guid=列{name='section\u guid', type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},photo=列{name='photo',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},content\u type=列{name='content\u type', type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},dateAgo=列{name='dateAgo',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},thumb=列{name='thumb',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},title=列{name='title',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},data\u source=列{name='data\u source', type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},topic\u guid=列{name='topic\u guid', type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},id=列{name='id',type='INTEGER', affinity='3',notNull=true,primaryKeyPosition=1, defaultValue='null'},pubDate=列{name='pubDate',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},youtube=列{name='youtube',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},主题=列{name='topic',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},section\u title=列{name='section\u title', type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},foreignKeys=[],index=[]

发现: TableInfo{name='news',columns={alias=Column{name='alias',type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},selected=列{name='selected',type='INTEGER', affinity='3',notNull=true,primaryKeyPosition=0, defaultValue='null'},link=列{name='link',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},guid=列{name='guid',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},site=列{name='site',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},日期=列{name='date',type='INTEGER', affinity='3',notNull=true,primaryKeyPosition=0, defaultValue='null'},topic\u url=列{name='topic\u url',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},section\u url=列{name='section\u url', type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},num_photo=列{name='num_photo',type='TEXT', affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},section\u guid=列{name='section\u guid', type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, 默认09-12 19:06:48.734 6165-6190/com.ngerancang.cacheapipage E/eglCodecCommon:glUtilsParamSize:未知参数0x00008cdf 09-12 19:06:48.735 6165-6190/com.ngerancang.cacheapie/eglcodeccomon: glUtilsParamSize:未知参数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
            }

        }
    }
}

我花了几个小时,但仍然没有找到解决方案。我的迁移查询有什么问题?

我发现了我的问题,因为

期望

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'},

您是如何创建此迁移的?您是手动编写原始sql查询的吗?@cewaphi我作为变量migration_1_2编写的。然后我在database builderyeah中添加了这就是您告诉
Room
如何在DB版本之间转换的方式。但是您是如何验证迁移方法中的原始sql命令与对
Roo所做的更改相同m
entities?@cewaphi你是说我的数据库类吗,我更新了我的问题,也许会很清楚