可以改变这张桌子吗?

时间:2012-09-04 22:32:12

标签: android database sqlite android-sqlite

在我之前的应用版本中,我创建了一个表格,如:

public static final String CREATE_DATABASE = "CREATE TABLE " + TABLE_NAME
        + "(_id INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_NAME_TITLE + " TEXT, "
        + COLUMN_NAME_LOGIN + " TEXT, " + COLUMN_NAME_PASSWORD + " TEXT, " + COLUMN_NAME_NOTES
        + " TEXT);";

在当前版本中,我创建了一个表格,如:

public static final String CREATE_DATABASE = "CREATE VIRTUAL TABLE " + TABLE_NAME + " USING fts3 "
        + "(_id INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_NAME_TITLE + " TEXT, "
        + COLUMN_NAME_LOGIN + " TEXT, " + COLUMN_NAME_PASSWORD + " TEXT, " + COLUMN_NAME_NOTES
        + " TEXT, " + COLUMN_NAME_FAV + " INTEGER DEFAULT 0, " + KEY_WORD + ");";

现在它是VIRTUAL,已创建USING fts3并添加了两个新列COLUMN_NAME_FAVKEY_WORD

是否可以在升级时以某种方式改变表格?如果没有,我该怎么做才能让用户丢失他们的数据?

2 个答案:

答案 0 :(得分:1)

无法运行将常规表转换为VIRTUAL表的简单alter命令。

而不是你应该:

  1. 将表中的数据加载到内存中/复制表。
  2. DROP旧桌子。
  3. CREATE新表。
  4. 使用步骤1中的数据填充新表。

答案 1 :(得分:0)

通常可以安全地将新列添加到现有表中,只要它们可以为空并且/或具有默认值即可。为什么不创建现有表的副本并尝试对其进行更改(副本)以检查发生的情况 附:在DB运行时,您可能必须设置几个DB标志以允许更改表。