Як перенести різну версію бази даних SQLite Якщо програма вже є на PlayStore?

У мене є одне додаток, яке я вже опублікував V1, які мають SQLite базу даних, але в V2 я оновив схему баз даних, моє питання полягає в тому, як перенести базу даних без втрати даних, які вже існують.

1
додано Автор IntelliJ Amiya, джерело
додано Автор IntelliJ Amiya, джерело
перевірте метод onUpgrade в SQLite
додано Автор Pratik Mohanrao Gondil, джерело

6 Відповіді

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
додано
але як щодо користувальницьких даних, які він буде захищати, коли я оновлюю схему бази даних?
додано Автор Rahul Chokshi, джерело
Дякую, за відповідь
додано Автор Rahul Chokshi, джерело
піти на оновлення сили
додано Автор shashank J, джерело
У будь-якому випадку спасибі за downvote
додано Автор shashank J, джерело
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
додано
але як щодо користувальницьких даних, які він буде захищати, коли я оновлюю схему бази даних?
додано Автор Rahul Chokshi, джерело
Дякую, за відповідь
додано Автор Rahul Chokshi, джерело
піти на оновлення сили
додано Автор shashank J, джерело
У будь-якому випадку спасибі за downvote
додано Автор shashank J, джерело

Моє питання полягає в тому, як перенести базу даних без втрати даних   що вже існує.

Це можливо. Ви повинні прочитати onUpgrade .

публічне абстрактне void onUpgrade (база даних SQLiteDatabase,                       int oldVersion,                       int newVersion)

Викликається, коли потрібно оновити базу даних. Реалізація повинна використовувати цей метод для скидання таблиць, додавання таблиць або робити що-небудь інше, що потрібно для оновлення до нової версії схеми.

ПРИКЛАД

Якщо додати новий стовпець,

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {      
          Log.e("VERSION", "Updating table from " + oldVersion + " to " + newVersion);
           if (oldVersion < Your_New_version){
            db.execSQL("ALTER TABLE " + TABLE_NAME  + " ADD COLUMN new_column_name TEXT;");
        }

    }
0
додано
Спасибі, людина це корисно.
додано Автор Rahul Chokshi, джерело

Моє питання полягає в тому, як перенести базу даних без втрати даних   що вже існує.

Це можливо. Ви повинні прочитати onUpgrade .

публічне абстрактне void onUpgrade (база даних SQLiteDatabase,                       int oldVersion,                       int newVersion)

Викликається, коли потрібно оновити базу даних. Реалізація повинна використовувати цей метод для скидання таблиць, додавання таблиць або робити що-небудь інше, що потрібно для оновлення до нової версії схеми.

ПРИКЛАД

Якщо додати новий стовпець,

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {      
          Log.e("VERSION", "Updating table from " + oldVersion + " to " + newVersion);
           if (oldVersion < Your_New_version){
            db.execSQL("ALTER TABLE " + TABLE_NAME  + " ADD COLUMN new_column_name TEXT;");
        }

    }
0
додано
Спасибі, людина це корисно.
додано Автор Rahul Chokshi, джерело

You'll have to override onUpgrade method of SQLiteOpenHelper

Refer this gist for a sample - https://gist.github.com/mlnkrish/eeed1cfa9c11f6d37841

0
додано
Гаразд, я перевірю спасибі Ваш час
додано Автор Rahul Chokshi, джерело

You'll have to override onUpgrade method of SQLiteOpenHelper

Refer this gist for a sample - https://gist.github.com/mlnkrish/eeed1cfa9c11f6d37841

0
додано
Гаразд, я перевірю спасибі Ваш час
додано Автор Rahul Chokshi, джерело
android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.