感谢您在这里阅读我的问题。
实际上,当我需要在表中为多个sq-lite版本添加一些行时,我对如何处理SQLite tables
感到困惑。
我谷歌的东西,发现这样的东西,我们必须在onUpgrade
方法做alter table。
这将是工作顺序更新。
Suppose i have 3 devices they have below versions of database
1) 1st device = database version 1
2) 2nd device = database version 2
3) 3rd device = application not installed.
database version 1 = 2 columns
database version 2 = 2+2 columns
database version 3 = 4+2 columns.
所以在这里,如果我需要更新我的Android应用程序用户那么我必须做什么? 我有以下几种情况。
1) Updated application would be install in 3rd device where still application is not installed.
2) Application should be update from version 1 to version 3 (Device 1st).
3) Application should be update from version 2 to version 3 (Device 2nd).
在这里,我可以了解如何处理3号场景,但我不知道如何处理第1和第2场景。
如何编写代码以便它适用于所有场景。
onUpgrade方法将仅调用数据库版本更改,并在创建数据库时调用onCreate。
谢谢任何帮助和建议将不胜感激。
答案 0 :(得分:7)
根据您的提及(例如onUpgrade方法),我假设您使用的是SQLiteOpenHelper。
首先将您的数据库版本更新为3。
在onCreate(SQLiteDatabase db)中,更新代码,以便根据最新的版本3架构创建所有表(例如,表中包含col1,col2和col3)。新安装将触发此代码,创建一个全新的v3表。
在onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)中,参考旧版本和新版本参数并相应地更新已存在的表格,例如
if (oldVersion == 1 && newVersion = 2)
{
//Going from v1 to v2
db.execSQL("ALTER TABLE mytable ADD COLUMN col2 INTEGER");
}
if (oldVersion == 1 && newVersion = 3)
{
//Going from v1 to v3
db.execSQL("ALTER TABLE mytable ADD COLUMN col2 INTEGER");
db.execSQL("ALTER TABLE mytable ADD COLUMN col3 INTEGER");
}
if (oldVersion == 2 && newVersion = 3)
{
//Going from v2 to v3
db.execSQL("ALTER TABLE mytable ADD COLUMN col3 INTEGER");
}
当数据库版本与用户当前具有的版本不匹配时,将触发此代码。您知道它们具有的版本,因此可以相应地修改现有表格,使其达到与onCreate相同的定义。您当然可以在onUpgrade中执行任何操作,例如创建新表和插入/更新/删除数据。