当用户不想更新应用程序时,我缺少如何处理SQLite数据库迁移的清晰性,其中包括已更新应用程序的其他列。如何处理当机问题,以及使用者不想更新应用程式时发生的问题。任何建议都是可取的。
我尝试了以下代码,其中包括当用户不想更新应用程序时升级数据库版本。
就像下面的升级方法一样
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
switch (oldVersion){
case 1:
db.execSQL("ALTER TABLE " + TABLE_GITHUB + " ADD COLUMN " +
NODE_ID + " TEXT ");
case 2:
db.execSQL("ALTER TABLE " + TABLE_GITHUB + " ADD COLUMN " +
PRIVATE + " TEXT ");
case 3:
db.execSQL("ALTER TABLE GITHUB_DATA ADD COLUMN repos_url
text");
}
}
当用户具有SQLite版本2并通过使用上述升级方法将其设置为3时,我已成功升级SQLite数据库。但是我无法获取我添加的列(来自repos_url列)的数据。该列已添加到SQLite中,但是尽管我有来自服务器的数据,但无法获取数据。任何建议都是可取的。谢谢。
编辑: 如果要使用服务器维护版本控制,请考虑这种情况。
我有新版本用户需要包含的repos_url。这是我需要在recyclerview中显示的适配器。
@Override
public void onBindViewHolder(@NonNull GithubViewHolder githubViewHolder, int i) {
HashMap<String,String> hashMap = githubArryaList.get(i);
githubViewHolder.name.setText(hashMap.get("name"));
githubViewHolder.fullname.setText(hashMap.get("full_name"));
githubViewHolder.id.setText(hashMap.get("id"));
githubViewHolder.node_id.setText(hashMap.get("node_id"));
githubViewHolder.priv.setText(hashMap.get("private"));
//new column
githubViewHolder.repos_url.setText(hashMap.get("repos_url"));
}
这是发送数据的sqlite方法。
public ArrayList getFavouritesData(){
ArrayList arrayList = new ArrayList();
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_GITHUB,null);
if (cursor.moveToFirst()){
do {
HashMap<String,String> hashMap = new HashMap<>();
hashMap.put(SqliteFavouriteDatabase.NAME,cursor.getString(cursor.getColumnIndex(SqliteFavouriteDatabase.NAME)));
hashMap.put(SqliteFavouriteDatabase.FULL_NAME,cursor.getString(cursor.getColumnIndex(SqliteFavouriteDatabase.FULL_NAME)));
hashMap.put(SqliteFavouriteDatabase.ID,cursor.getString(cursor.getColumnIndex(SqliteFavouriteDatabase.ID)));
hashMap.put(SqliteFavouriteDatabase.NODE_ID,cursor.getString(cursor.getColumnIndex(SqliteFavouriteDatabase.NODE_ID)));
hashMap.put(SqliteFavouriteDatabase.PRIVATE,cursor.getString(cursor.getColumnIndex(SqliteFavouriteDatabase.PRIVATE)));
hashMap.put(SqliteFavouriteDatabase.REPOS_URL,cursor.getString(cursor.getColumnIndex(SqliteFavouriteDatabase.REPOS_URL)));
arrayList.add(hashMap);
}while (cursor.moveToNext());
}
cursor.close();
db.close();
return arrayList;
}
问题是旧版本如何处理新的列数据。当没有旧版本的名为repos_url的列但我必须为新用户使用repos_url时出现问题这两个版本(新旧版本)的方法和适配器。如何在两个版本中使用该方法和适配器。谢谢
答案 0 :(得分:0)
这是向后兼容-您的新服务器与旧版本的应用不兼容。
虽然不可能(或很难)修改旧版本的应用程序,但是您可以同时更改新版本的应用程序和新版本的服务器来处理此问题: