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