SQLite数据库更新重新创建表保留值

时间:2018-10-02 14:59:18

标签: android database sqlite

我有一个带有一个表的SQLite数据库,需要在新版本的数据库中对其进行更新。

在表格的第一个版本中,我有一个id和一个txt值,如下所示:

db.execSQL("CREATE TABLE table_name id INTEGER PRIMARY KEY AUTOINCREMENT, txt TEXT")

但是在下一版本的数据库中,我希望添加一个最后更改的值,该值必须是我在(epftime('%s','now'))中使用的默认时间为当前时间的TIMESTAMP。

但是由于此错误,我无法添加具有默认当前时间的列:

在编译时无法添加具有非恒定缺省值(代码1)的列:ALTER TABLE table_name ADD COLUMN edited_time TIMESTAMP DEFAULT(strftime('%s','now')) < / p>

我想最好地重新创建数据并将其复制到新数据库中

// copy all data to single value something like a Cursor res maybe??
db.execSQL("DROP TABLE IF EXISTS table_name );
db.execSQL("CREATE TABLE table_name id INTEGER PRIMARY KEY AUTOINCREMENT, txt TEXT, edited_time TIMESTAMP DEFAULT (strftime('%s', 'now'))");
// now insert the values into the recreated database

但是为此,我需要将所有数据复制到一个不同时存在的新表中。是否可以做到这一点而无需循环并且不必将每个值分开保存,然后再次分别插入?

1 个答案:

答案 0 :(得分:0)

是的。常规步骤是:

BEGIN;
ALTER TABLE table_name RENAME TO table_name_old;
CREATE TABLE table_name( ... );
INSERT INTO table_name(col1, ..., coln) 
  SELECT col1, ..., coln FROM table_name_old;
DROP table_name_old;
COMMIT;
相关问题