我想在我的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 );
}
会没事吗?
答案 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:
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方法,由您决定是要清除数据还是保留数据。