2016-05-09 3 views
-1

Кто-нибудь, пожалуйста, помогите мне относительно правильного использования onUpgrade() в классе sqliteopenhelper. Спасибо заранее.Что такое onUpgrade() в sqlite?

+1

проверить эту ссылку надеюсь, что это поможет вам http://developer.android.com/intl/ru/reference/android/database/sqlite/SQLiteOpenHelper.html#onUpgrade(android.database.sqlite.SQLiteDatabase, int, int) –

+0

Какова конкретная проблема, с которой вы сталкиваетесь с 'onUpgrade()'? – laalto

+0

На самом деле у меня есть приложение для домашней автоматизации, которое имеет множество устройств, которые сохраняются в локальном db. Я сомневаюсь, что если какая-либо модернизация, сделанная разработчиком, как она отражается в моем локальном db. Если все таблицы будут заменены, я потеряю все данные. Там все равно для резервного копирования? Пожалуйста, помогите мне. –

ответ

0

В Sqliteopenhelper вы определяете версию своей базы данных. Если вы измените свою базу данных, то будет выполнена onUpgrade(). Он является аналогом onCreate()

В вашем onUpgrade вы уроните старые таблицы и создадите новые.

Существует небольшой пример:

public class BaseDatabaseHandler extends SQLiteOpenHelper { 

    /******************************************************** 
    * Database 
    ********************************************************/ 
    private static final int DATABASE_VERSION = 4; 
    private static final String DATABASE_NAME = "test.db"; 


    /******************************************************** 
    * Table names 
    ********************************************************/ 
    protected static final String TABLE_INPUT = "input"; 


    /******************************************************** 
    * Column names 
    ********************************************************/ 

    /* Input*/ 
    protected static final String COLUMN_ID = "id"; 
    protected static final String COLUMN_NAME = "name"; 


    public BaseDatabaseHandler(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 


     String CREATE_INPUT_TABLE = 
       "CREATE TABLE " + TABLE_INPUT + " (" 
        + COLUMN_ID + " LONG PRIMARY KEY, " 
        + COLUMN_NAME + " TEXT, " 
        + ")"; 


     db.execSQL(CREATE_INPUT_TABLE); 

    } 

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

Уважаемый Dteuchert, спасибо за ответ. Что насчет моих старых данных таблицы? Будет ли он потерян, если я обновлю свое приложение? В любом случае, для резервного копирования всех моих данных. Пожалуйста, объясните. –

+0

Эй, да, эти данные будут потеряны. Вы можете запрограммировать функцию, которая каким-то образом хранит ваши старые данные и вызывает эту функцию до 'db.execSQL (« DROP TABLE IF EXISTS »+ TABLE_INPUT); – DTeuchert

1

при изменении элемента таблицы базы данных или значения столбца, то вы должны обновить до данных, чтобы отразить это изменение. Другим способом нет такой таблицы или другой ошибки. , поэтому после изменения в базе данных, если приложение уже загружено, вам необходимо изменить версию базы данных, и вся таблица воссоздается в методе onUpdate().

Смежные вопросы