2013-08-22 47 views
0

我有一个已发布到Google Play商店的工作应用程序。我在我的应用程序中使用sqllite数据库来存储数据。我有以下问题。在更新现有应用程序中创建新表格

  1. 目前我的应用程序版本为例如1.1它只有一个表。我创建了我的数据帮助类的onCreate()方法。

  2. 在更新1.2中,我添加了一个表,我的数据库,我在onUpgrade()方法内创建。像下面

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
        db.execSQL(ShortCode.TABLE_CREATE_STATEMENT); 
        onCreate(db); 
    } 
    

现在我有什么观察,如果用户之前已经在他的手机安装了1.1,他更新到1.2,这两个表在用户创建可以使用的应用程序没有任何问题。 但如果用户安装新鲜副本或直接1.2应用程序崩溃。可以做些什么来避免这种情况。任何帮助将不胜感激。提前致谢。

回答

2

在onUpgrade方法中,您需要删除现有数据表的备份。然后,在你的onCreate需要创建表和插入旧的数据,如果任何....

+0

@Gaurav Sharma:有用吗? – Shane

+0

但是应用程序更新后不调用'onCreate'。 –

+0

您必须在删除现有表后在onUpgrade()中调用onCreate()... – Shane

0

onCreate用于新安装的应用程序(或用户删除应用程序数据后)。
onUpgrade用于更新应用程序时,即设备上已存在某些较旧版本的数据时。

您的1.2应用程序的onCreate方法必须创建该版本所需的所有表。

+0

我已经在我的应用程序做这个新表。但这是唯一的解决方案吗?如果是这样,那么实现onUpgrade()有什么好处? – CodingRat

0

`@覆盖 公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释NEWVERSION){ db.execSQL(“DROP TABLE IF EXISTS“+ TABLE_Old1_TABLE); db.execSQL(“DROP TABLE IF EXISTS”+ TABLE_Old2_TABLE); onCreate(db); }

而在你onCreate()方法你创建了这个 -

`String CREATE_New_Table = "CREATE TABLE IF NOT EXISTS " + TABLE_New_TABLE + "(" + KEY_ID 
      + " INTEGER PRIMARY KEY," + Id + " TEXT, " + Address + " TEXT, " + AppName + " TEXT " + ")"; 
    db.execSQL(CREATE_Village_Table);` 
相关问题