Как обновить базу данных SQLite и НЕ потерять все существующие данные? - PullRequest
10 голосов
/ 04 марта 2011

Я добавляю таблицу в базу данных SQLite моего приложения. Весь мой синтаксис там в порядке, не проблема. Но у меня возникли проблемы с созданием новой таблицы. Я добавил новую таблицу ....

@Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(DATABASE_CREATE);
            db.execSQL(CREATE_REQUESTS);
            db.execSQL(CREATE_OVERRIDE);
        }

Мой метод создания. У меня есть 3 таблицы. Когда я обновил номер версии, я получил сообщение о том, что «запросы к таблице (имеется в виду CREATE_REQUESTS) уже созданы». Посмотрите на мой метод onUpgrade ...

@Override 
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS contacts");
            onCreate(db);
        }

Я понял, что строка db.execSQL("DROP TABLE IF EXISTS contacts"), которая ссылается на мою таблицу DATABASE_CREATE в методе onCreate, используется для удаления старой таблицы, затем следующая строка, onCreate(db);, воссоздает ее. Я не добавил запросы в эту строку execSQL, что и привело к ошибке Вот проблема: я бы предпочел не потерять данные в двух таблицах, которые у меня уже есть. Есть ли способ добавить таблицу, как я пытаюсь сделать, и не потерять все старые данные? Спасибо.

Ответы [ 2 ]

13 голосов
/ 04 марта 2011

Вы можете делать все что угодно в onUpgrade.Вы можете использовать ALTER для добавления новых столбцов в вашу таблицу.

В худшем случае, если ваша схема совершенно иная, вам нужно будет создать новую таблицу, заполнить ее данными из старой таблицы, а затем удалите старую таблицу.

В любом случае onUpgrade был разработан, чтобы обеспечить плавное обновление без потери данных.Это зависит только от вас, чтобы реализовать это правильно.

0 голосов
/ 26 сентября 2017

если версия БД: 6

Ex : There is a table with 5 columns

При обновлении до: 7 (я добавляю 1 новый столбец в 3 таблицы)

 1. We need to add the columns when creating a table

 2. onUpgrade method:

 if (oldVersion < 7) 
 { 
    db.execSQL(DATABASE_ALTER_ADD_PAPER_PAID);
    db.execSQL(DATABASE_ALTER_LAST_UPLOADED);
    db.execSQL(DATABASE_ALTER_PAPER_LABEL); 
 }

Где: «DATABASE_ALTER_ADD_PAPER_PAID» - это запрос.

EX: public static final String DATABASE_ALTER_ADD_PAPER_PAID = "ALTER TABLE "
                + TableConstants.MY_PAPERS_TABLE + " ADD COLUMN " + COLUMN_PAPER_PAID + " TEXT;";

После двух вышеуказанных операций он будет работать нормально для нового пользователя установки и пользователя обновления приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...