Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在更新现有应用程序时创建新表_Android_Sqlite_Sql Update_Android Sqlite_Updates - Fatal编程技术网

Android 在更新现有应用程序时创建新表

Android 在更新现有应用程序时创建新表,android,sqlite,sql-update,android-sqlite,updates,Android,Sqlite,Sql Update,Android Sqlite,Updates,我有一个工作应用程序,已经发布到谷歌游戏商店。我在应用程序中使用sqllite数据库来存储数据。我有一个问题如下 目前我的应用程序版本为eg 1.1,它只有一个表。我在data helper类的onCreate()方法中创建了它 在更新1.2中,我在onUpgrade()方法中创建的数据库中又添加了一个表。像下面 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL(Sho

我有一个工作应用程序,已经发布到谷歌游戏商店。我在应用程序中使用sqllite数据库来存储数据。我有一个问题如下

  • 目前我的应用程序版本为eg 1.1,它只有一个表。我在data helper类的onCreate()方法中创建了它

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

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
      db.execSQL(ShortCode.TABLE_CREATE_STATEMENT);
      onCreate(db);
    }
    
  • 现在我有一个观察者,如果一个用户以前在他的手机上安装了1.1,并且他更新到了1.2,这两个表都是在用户可以使用的应用程序中创建的,没有任何问题。
    但若用户安装了fresh copy或直接安装1.2应用程序,应用程序就会崩溃。可以采取哪些措施来避免这种情况。任何帮助都将不胜感激。提前谢谢

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


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

    在onUpgrade方法中,您需要删除备份数据的现有表。然后在onCreate中,您需要创建表并插入旧数据(如果有)…

    `@Override public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){ db.execSQL(“如果存在删除表”+表\u Old1\u表); db.execSQL(“如果存在删除表”+表\u Old2\u表); 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);`
    

    我已经在我的应用程序中这样做了。但这是唯一的解决办法吗?如果是这样,那么实施onUpgrade()有什么好处?