Вопрос:

Создать дополнительную таблицу в существующем SQLITE (без потери данных)

android sql sqlite

2142 просмотра

5 ответа

386 Репутация автора

Я хотел бы добавить дополнительную таблицу в моей существующей БД без потери данных. Поэтому отбрасывать таблицы и создавать их новые не вариант. Каков наилучший способ сделать это?

Автор: venni Источник Размещён: 05.07.2012 08:12

Ответы (5)


3 плюса

43866 Репутация автора

способ, которым я это сделал, - создать отдельную базу данных, скопировать все из текущей во временную новую, затем отбросить старую базу данных, сделать что угодно и затем скопировать информацию обратно из временной базы.

не уверен, есть ли другой способ сделать это, но если есть, я хотел бы услышать об этом

Автор: tyczj Размещён: 05.07.2012 08:15

0 плюса

1084 Репутация автора

Создайте класс, который расширяет SQLiteOpenHelper, переопределите onOpen (база данных SQLiteDatabase), создайте строку с запросом на создание таблицы, а затем используйте db.execSQL (строка Str);

Автор: Comic Sans MS Lover Размещён: 05.07.2012 08:18

5 плюса

386 Репутация автора

Кажется, все намного проще. Я использую SQLiteOpenHelper. Поэтому onCreate () никогда не вызывается, если БД уже существует. Когда номер версии увеличивается, вызывается onUpdate (). В onUpdate () я добавил мою новую таблицу с «создать таблицу, если не существует». Из документации SQLITE.ORG: Однако, если предложение «IF NOT EXISTS» указано как часть оператора CREATE TABLE, а таблица или представление с таким именем уже существует, команда CREATE TABLE просто не имеет никакого эффекта (и нет сообщение об ошибке возвращается). Теперь таблица создана и ее хорошо.

Автор: venni Размещён: 05.07.2012 10:09

1 плюс

151 Репутация автора

Если вы хотите добавить новую таблицу в существующую базу данных, вы должны сделать это внутри метода onUpgrade (), например:

 @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion == xyz) {
        db.execSQL(QUERY_CREATE_TABLE_..........NEW);
    }
}

Здесь xyz - старая версия базы данных, в которую вы хотите добавить новую таблицу.

И не забудьте обновить DATABASE_VERSION

Когда мы увеличиваем версию базы данных, то вызывает метод onUpgrade () и, используя условие, добавляет таблицу.

А также создайте новую таблицу внутри onCreate () с существующими таблицами для новых установок, таких как: -

 @Override
public void onCreate(SQLiteDatabase db) {
        db.execSQL(QUERY_CREATE_TABLE_..........OLD);
        db.execSQL(QUERY_CREATE_TABLE_..........OLD);
        db.execSQL(QUERY_CREATE_TABLE_..........NEW);
}
Автор: Himanshu arora Размещён: 19.05.2016 11:03

-1 плюса

1 Репутация автора

Сначала вы должны знать о методах onCreate () и onUpgrade ()

onCreate - когда вызывается ваша база данных, созданная впервые для метода onCreate (). Когда вы устанавливаете приложение в первый раз, всегда вызывается метод onCreate ()

onUpgrade () - когда вы меняете версию базы данных, вызывается метод onUpgrade ()

Таким образом, новый пользователь должен получить всю таблицу, а старый пользователь - всю обновленную таблицу и новую таблицу.

В следующем примере предположим, что мы добавляем новую таблицу Table_5 и Altering Table_4

public void onCreate(SQLiteDatabase db) {
 //For new User oncreate method will executed an new user get all the table
    db.execSQL( Create_Table );
    db.execSQL( Create_Table2 );
    db.execSQL( Create_Table3 );
    db.execSQL( Create_Table4 );
    db.execSQL( Create_Table5);  
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

      if(oldVersion<newVersion)
        {
           //For old user onUpgrade method is execute 
             db.execSQL( Alter_Table4);
             db.execSQL( Create_Table5);

         }     
}
Автор: IMRAN TAMBOLI Размещён: 15.03.2019 08:09
Вопросы из категории :
32x32