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

如何将现有的sqlite表迁移到具有VCHAR、TIMESTAMP等数据类型的ROOM Db中?

韦智刚
2023-03-14

在我的旧html" target="_blank">sqlite表中,我有这些列(id INTEGER主键AUTOINCREMENT、api_response_json TEXT、api_req TEXT、post_params TEXT、req_type VARCHAR、timestamp timestamp)

    @Override
    public void migrate(SupportSQLiteDatabase database) {
    // Create the new table
        database.execSQL(
                "CREATE TABLE users_new (id INTEGER PRIMARY KEY AUTOINCREMENT,api_response_json TEXT, api_req TEXT,post_params TEXT,req_type VARCHAR,timestamp TIMESTAMP)");
    // Copy the data
        database.execSQL("INSERT INTO users_new (id,api_response_json, api_req,post_params,req_type,timestamp) "
                + "SELECT id,api_response_json, api_req,post_params, req_type,timestamp "
                + "FROM old_Table_name");
    // Remove the old table
        database.execSQL("DROP TABLE old_Table_name");
    // Change the table name to the correct one
        database.execSQL("ALTER TABLE users_new RENAME TO old_Table_name");}
};

我收到一个错误迁移没有正确处理

应为:TableInfo{name='api_data',columns={timestamp=column{name='timestam',type='text',notnull=false,primarykeyposition=0},req_type=column{name='req_type',type='text',notnull=false,primarykeyposition=0},post_params=column{name='post_params',type='text',notnull=false,primarykeyposition=0},id=column{name='id',type='integer',notnull=false,'api_response_json',type='text',notnull=false,primarykeyposition=0},api_req=column{name='api_req',type='text',notnull=false,primarykeyposition=0}},foreignkeys=[],indices=[]}

找到:TableInfo{name='api_data',columns={timestamp=column{name='timestamp',type='timestamp',notnull=false,primarykeyposition=0},req_type=column{name='req_type',type='varchar',notnull=false,primarykeyposition=0},post_params=column{name='post_params',type='text',notnull=false,primarykeyposition=0},id=column{name='id',type='integer',notnull=false,{name='api_response_json',type='text',notnull=false,primarykeyposition=0},api_req=column{name='api_req',type='text',notnull=false,primarykeyposition=0}},foreignkeys=[],indices=[]}

时间戳和VARCHAR有问题。

共有1个答案

堵鸿光
2023-03-14

是的,TIMESTAMP和VARCHAR中有问题,您应该将其更改为:

    static final Migration MIGRATION_1_2 = new Migration(1, 2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {
        // Create the new table
        database.execSQL(
                "CREATE TABLE users_new (id INTEGER PRIMARY KEY AUTOINCREMENT,api_response_json TEXT, api_req TEXT,post_params TEXT,req_type TEXT,timestamp TEXT)");
        // Copy the data
        database.execSQL("INSERT INTO users_new (id,api_response_json, api_req,post_params,req_type,timestamp) "
                + "SELECT id,api_response_json, api_req,post_params, req_type,timestamp "
                + "FROM old_Table_name");
        // Remove the old table
        database.execSQL("DROP TABLE old_Table_name");
        // Change the table name to the correct one
        database.execSQL("ALTER TABLE users_new RENAME TO old_Table_name");}
    };

答案就在您的迁移错误中

 类似资料:
  • 在构建Room数据库之前,我尝试保留旧的SqliteOpenHelper并使用它从1升级到3。这在第一次运行时有效,但随后的运行会使SqliteOpenHelper崩溃,因为它不能降级数据库(Room成功升级到v4,但open helper只知道v3。使用它来确保升级到v3的数据库会导致它尝试降级)

  • 我必须将昨天添加的一位同事的迁移应用到我的本地数据库: 问题是我的表中已经有数据并且迁移失败: 有什么方法可以避免这种冲突,而不必清除< code>Document表中的所有数据?

  • 问题内容: 我不想破坏我网站上的所有用户。但是我想利用Django 1.5的自定义可插入用户模型。这是我的新用户模型: 一切都可以在新安装的新模型上正常工作(我还有其他代码,并且有这样做的充分理由-所有这些在这里都无关紧要)。但是,如果我将其放在我的活动站点上并进行同步数据库和迁移,我将失去所有用户,或者至少他们将位于与为新模型创建的新表不同的孤立表中。 我对South很熟悉,但是根据这篇文章和我

  • 我试图将现有的Spring项目迁移到Spring Boot。在项目中已经使用了Spring Data JPA/Hibernate和带有JDBC的简单DAO(使用了PostgreSQL)。在几个州,我发现所有我需要在Spring Boot迁移,是: 添加必要的依赖项 添加入口点@SpringBootApplication 利润,仅此而已 1) 依赖项: 对于DependencyManager部分,我

  • 我创建了一个Doctrine2实体,并想在MySQL中映射一个字段到时间戳列。 注释类型为“datetime”时,出现以下错误: 条令\DBAL\Types\ConversionException:无法将数据库值“1390362851”转换为条令类型datetime。预期格式:Y-m-d H:i:s 在63行 /var/www/packer/vendor/doctrine/dbal/lib/Doc

  • 问题内容: 我有一些代码可以返回新的iOS 10 / Swift 3 NSData替换(?)类型:数据 我想将此映像写入磁盘,但是此类不存在NSData的方法。它确实有一个方法,但是似乎不适用于文件路径(和附加组件)。 任何人都可以澄清一下我现在该如何做,就像Swift 2中的情况一样: 谢谢! 问题答案: 使用。 例如: 或者,如果您确实对坚持不懈,请将其转换为: 但是,通常,如今最好在整个代码