如果我向sqlite添加新列,我的应用程序是否会在市场上成功更新?

时间:2014-07-11 05:19:00

标签: android sqlite

我想在我的sqlite中添加一些列,也许可以在我的应用程序中添加新表,但它已经在市场上了,我知道如果我更改数据库结构上的内容,那么应用程序需要卸载并重新安装。

这会发生在实时应用中,用户必须先卸载还是会成功更新? 谢谢

编辑: 我在升级时所拥有的是:

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS titles");
        onCreate(db);
    }

但我认为它从未奏效。如果我用

替换它
@Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String query = "ALTER TABLE tablename ADD COLUMN newcolumn INT";
        if (oldVersion == 1 && newVersion == 2)
             db.execSQL(query );
    } 

会没事吗?

4 个答案:

答案 0 :(得分:0)

您必须在onUpgrade方法中处理操作。

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    String query = "ALTER TABLE tablename ADD COLUMN newcolumn INT";
    if (oldVersion == 1 && newVersion == 2)
         db.execSQL(query);
}

答案 1 :(得分:0)

  

如果我在数据库结构上改变某些内容,则应用程序需要   卸载并重新安装?

为什么会这样? SQLiteOpenHelper类提供了一种很好的机制来处理对应用程序数据库结构的更改。即,onUpgrade()。您可以执行任何必要的更改(创建新表,删除旧表,更改,并在那里)。

来自documentation of the constructor

  • version:数据库的编号(从1开始);如果数据库较旧,onUpgrade(SQLiteDatabase, int, int)将用于升级数据库;如果数据库较新,则onDowngrade(SQLiteDatabase, int, int)将用于降级数据库

答案 2 :(得分:0)

使用SQLiteOpenHelper此问题已解决。使用这个类,你将有一个db_version。每次增加db_version时,都会调用一个名为onUpgrade的方法。

检查this

您必须考虑的一件事是您以前的应用版本的db_version。您需要将旧db_version与最后一次db_version之间的所有更改应用。

希望有所帮助

答案 3 :(得分:0)

没有。如果用户正在更新应用程序(不卸载它 - 在这种情况下它将被删除)并且数据库已经存在,那么Android将不仅仅删除它(它可能包含重要信息!)。

相反,将调用SQLiteOpenHelper的onUpgrade方法,由您决定是要清除数据还是保留数据。