2013-11-09 42 views
2

我正在开发一个数据库应用程序,我卡在一个地方。在android的sqlite数据库onUpgrade

该方案是:我有一个数据库,我维护数据库的版本。 与应用程序版本相同。

现在我在版本1中实现数据库。在版本1中创建了3个表。在版本2中,我通过添加一个表来升级数据库。因此,查询位于upgrade()中。

现在,如果用户安装版本2,该怎么办。onUpgrade()不会被调用,因为没有数据库。因此,onCreate()将被调用,其后果将是它只会创建3个表。

我想在onCreate()中明确地调用onUpgrade()。但是很多在stackoverflow上的开发人员建议不要明确地调用它。

我完全滞留。

在此先感谢。

+0

为什么创建'onCreate'只有三个表? –

+0

感谢您的回复。这只是一个例子。我想在我的应用程序中处理onUpgrade()方法 –

回答

0

我知道这是旧的文章,你肯定找到了解决办法,但我发现这个问题的有效(upvoted)和它没有得到答复,这里是我的2美分:

调用onUpgrade()onCreate()应该工作(我没有测试它),但有一个更好的方法来组织你的帮手(见下面的片段)。关键是这两种方法都只是切入点。

public class SampleDBHelper extends SQLiteOpenHelper { 

    private static final String DB_NAME = "mydatabase"; 
    private static final int DB_VERSION = 2; 

    public SampleDBHelper(Context context) { 
     super(context, DB_NAME, null, DB_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     updateDatabase(db, 0, DB_VERSION); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     updateDatabase(db, oldVersion, newVersion); 
    } 

    private void updateDatabase(SQLiteDatabase db, int oldVersion, int newVersion) { 
     if (oldVersion < 1) { 
      // Create 3 initial tables 
     } 
     if (oldVersion < 2) { 
      // Create the new table 
     } 
    } 

} 

这种辅助性的优势:

  • 你永远需要改变onCreate()onUpgrade()方法,只有updateDatabase()
  • 对于每一个新版本,你只需要:
    • 增量DB_VERSION
    • 添加新的部分if (oldVersion < N) { // do the upgrade }

信用:从Head First Android Development强烈的启发,黎明和大卫·格里菲斯,奥赖利,2015年