gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 06:26:50 34 4
gpt4 key购买 nike

在我的旧 sqlite 表中,我有这些列 (id INTEGER PRIMARY KEY AUTOINCREMENT,api_response_json TEXT, api_req TEXT,post_params TEXT,req_type VARCHAR,timestamp TIMESTAMP)

现在我正在尝试像这样将它迁移到 Room DB:-

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 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='timestamp', 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, primaryKeyPosition=1}, api_response_json=Column{name='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, primaryKeyPosition=1}, api_response_json=Column{name='api_response_json', type='TEXT', notNull=false, primaryKeyPosition=0}, api_req=Column{name='api_req', type='TEXT ', notNull=false, primaryKeyPosition=0}}, foreignKeys=[], indices=[]}

TIMESTAMP 和 VARCHAR 有问题。

最佳答案

是的,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");}
};

答案在你的迁移错误中

关于android - 如何将现有的 sqlite 表迁移到具有 VARCHAR、TIMESTAMP 等数据类型的 ROOM Db?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50323824/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com