我有一个已经发布了V1的应用程序,其中有一个SQLite数据库,但是在V2中我更新了数据库架构,我的问题是我如何在不丢失已经存在的数据的情况下迁移数据库。
答案 0 :(得分:0)
public class DatabaseHelper extends SQLiteOpenHelper {
// Database Version
private static final int DATABASE_VERSION = 1; //<<**Increase the database
version** here
//when you make any database schema changes
....
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + Note.TABLE_NAME); // take the respective action
// Create tables again
onCreate(db);
}
}
....... 上述更改将正常运行,但是如果您已经启动了应用程序,则可以选择以下选项: 1)进行强制更新 2)如果您在标头中保留了会话令牌(在命中API的同时),那么请与后端团队讨论,为无效令牌提供404错误代码(任何),然后对该错误代码进行注销处理,因此当用户登录时,所有数据将新鲜存储。 (如果您没有任何注销处理,则不建议采用这种方式。)
答案 1 :(得分:0)
我的问题是这如何在不丢失数据的情况下迁移数据库 已经存在。
有可能。您应该首先阅读onUpgrade
。
public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
在需要升级数据库时调用。实现应使用此方法删除表,添加表或执行其他任何升级到新架构版本所需的操作。
示例
如果您添加新列,
if (!class_exists('Proxy')){}
答案 2 :(得分:0)
您必须覆盖onUpgrade的SQLiteOpenHelper方法
请参考以下要点以获取示例-https://gist.github.com/mlnkrish/eeed1cfa9c11f6d37841