Android如何更新SQLite数据库模式?

8

更新数据库架构的最佳实践是什么?我可以发送一个包含SQL命令的文本文件。应用程序可以检查文本文件并执行所需的命令。然后,我猜我会有一个标志来表示更新已完成。我还没有找到一种从应用程序中删除资产文件夹中文件的方法,这将是在更新数据库之后做的最好的事情。

对此有何想法?

4个回答

13

这看起来不错,但如果用户不更新并跳过了几个版本会发生什么?假设他们有第1个版本。一切都很好。我在第2个版本上使用onUpdate(),这里一切都很好,我可以在代码中放入SQL命令。然后第3个版本出现了,我清除了上次的更新并加入了新的更新,我认为这很好。但是那些从未得到第2个版本的人会发生什么? - Mark Worsnop
4
您需要在onUpdate()中处理所有情况。所以,如果您有模式修订版本1、2和3,并且您需要从1转到3,则一种解决方案是先应用1到2的更改,然后应用2到3的更改。 - CommonsWare
正如@CommonsWare先生所提到的,在onUpdate()方法中,我们应该考虑所有情况,即1->2、1->3、2->3,因为我们不应该假设所有用户都有最新版本。 - Kushal

4
更新数据库模式的最佳实践是什么?
使用SQLiteOpenHelper。您将更新应用程序时才会更新模式。无论您是在读取文件中拥有SQL命令还是只在Java代码中拥有,都由您决定。
我猜我需要一个标志来指示已完成更新。
这就是SQLiteOpenHelper为您提供的一部分。
我还没有找到从应用程序中删除资产文件夹中的文件的方法,这将是在更新数据库后做的最好的事情。
很抱歉,这是不可能的。

1

正如其他人所提到的,SQLiteOpenHelper是你要开始使用的东西。

根据你的环境和要求,Liquibase可能值得一看。它允许以更结构化的方式编写更新语句,并且比纯SQL操作更容易使用。不过我还没有在Android上使用过它。


0
如果您想更新数据库模式,请在您的SQLiteOpenHelper扩展类中使用以下代码。这将更新表结构并永远不会丢失您从数据库中保存的数据。
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int 
    newVersion) {
      if (oldVersion < newVersion) 
      {
        db.execSQL("ALTER TABLE " + "TABLE_NAME" + " TO " + 
        "NEW_TABLE_NAME");

        db.execSQL("ALTER TABLE " + "TABLE_NAME" + " ADD COLUMN " + 
        "FIELD_NAME" + " INTEGER;");
      }   
    }

SQLite 不支持删除或修改列。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接