2011-07-05 131 views
1

我有点困惑与Android SQLite数据库处理。通过教程,但没有得到确切的观点。SQLite数据库升级

我们可以拥有一个扩展SQLiteOpenHelper的数据库类,并且可以覆盖onCreate()方法并创建一个数据库。

升级数据库部分有点混乱。在下面的方法如何处理verions onUpdate(SQLiteDatabase db,int old Version,int newVerison)

是不是就意味着我们第一次创建数据库意味着,如果我们要修改再次 老版本= 2,newVerison版本1然后修改一次,以便版本2 然后= 3
[onUpdate(SQLiteDatabase db,int old Version,int newVerison)]

此方法将是当我们通过构造版本,如在下面的代码(如2)执行

public DatabaseHelper(Context context) { 
    super(context, dbName, null,2); 
} 

我需要知道,当我们需要调用onUpgrade()方法,我们应该通过版本2总是或我们要增加一个每次的以前版本

回答

0

我用this approach使数据库架构演变更容易一点,你可能会发现它太有用。

+0

是的,但是当我们需要升级数据库时,你能解释如何管理版本吗?这是否意味着我们第一次创建数据库意味着版本1.然后修改一次,直到版本2.然后,如果我们想再次修改旧版本= 2,newVerison = 3或每次需要调用onUpgrade()方法时都必须在构造函数中将pass版本设置为2 – JibW

0

它完全取决于你如何维护数据库的版本。您可以在更改表格结构或修改内容后更改您的版本。维护版本控制并没有硬性规定。它取决于项目的要求。

+0

是的,但是当我们需要升级数据库时,您能否解释如何管理版本?这是否意味着我们第一次创建数据库意味着版本1.然后修改一次,直到版本2.然后,如果我们想再次修改旧版本= 2,newVerison = 3或每次需要调用onUpgrade()方法时都必须在构造函数中传递版本为2 – JibW

8

每次模式更改时增加数据库版本。

您不需要直接拨打onUpgrade。当您打开数据库时,Android会根据需要调用它,方法是将数据库的版本与您的代码指定的版本作为当前版本进行比较。

你只需要处理升级过程中onUpgrade - 它可能会去是这样的:

int curVer = oldVersion; 
while (curVer < newVersion) { 
    curVer++; 
    switch (curVer) { 
     case 2: { 
      // Upgrade from V1 to V2 
      break; 
     } 
     case 3: { 
      // Upgrade from V2 to V3 
      break; 
     } 
     case 4: { 
      // Upgrade from V3 to V4 
      break; 
     } 
    } 
} 

比方说你NEWVERSION是4和oldVersion是1 - 第一次迭代将增加CURVER为2,将运行V2到V3的升级代码。第二次迭代将curVer增加到3并运行V2到V3的升级代码,最后一次迭代将curVer增加到4并运行V3到V4的升级代码。

这适用于小于newVersion的所有oldVersion值。并且如果用户正在跳过应用程序的升级,则会通过中间版本顺序升级。

+0

你能告诉我,如何在更新数据时保留数据。 –

+1

@PratikButani升级时不需要删除任何东西。简单的模式更改(例如添加列或表)不会直接影响现有数据,更复杂的更新通常会将原始数据复制到临时表中,然后在那里进行转换,并在准备就绪时删除原始表并重命名临时表。 – RivieraKid

+0

谢谢,我明白了,但有什么办法可以处理所有的版本,比如一些使用v1或者一些是v2。我该如何处理。 –