2017-01-29 2 views
0

Я понимаю, что здесь есть много ответов для управления версиями SQLite, но я не смог найти ответ по моей конкретной проблеме. Я отлично справлялся с версией 1 довольно долго. Затем мне нужно было добавить еще один столбец «TAG» в мою таблицу и реализовать следующий код в onUpgrade.Android SQLite DB версии 2 error

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

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    if (oldVersion < 2) db.execSQL(DATABASE_ALTER_TAG); 
} 

Он отлично поработал. Без вопросов. Столбец TAG работал как ожидается чтение и запись - пока я не переустановил после полной деинсталляции. БД теперь не будет работать с использованием кода, который работал до удаления/переустановки.

Я подозреваю, что после удаления/переустановки «старая версия» имеет значение null (это не < 2), а столбец TAG не добавляется. Хотя я не совсем уверен. Является ли мой код onUpgrade проблемой?

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

EDIT ВОПРОС

ОК, спасибо за ответы до сих пор. Я понимаю, как заставить БД работать для тех, кто устанавливает приложение снова. Я также понимаю, как заставить БД работать для кого-то, кто идет от Версии 1 к Версии 2. Я пока не понимаю, как заставить его работать для обоих пользователей (новая установка против того, кто только что обновляется).

+0

Нет oldversion не может быть null, это примитивный тип данных. Ошибка в другом месте после журнала adb. –

+0

Вы добавили новый столбец TAG в свой оператор DATABASE_CREATE? –

+0

Я этого не делал. Мой «DATABASE_ALTER_TAG» добавляет столбец. Я смущен, почему мне нужно добавить его в onCreate и onUpgrade. – seekingStillness

ответ

1

Ваше предположение определенно неверно. Примитивные типы данных не являются объектами и, следовательно, не являются нулевыми.

Просто убедитесь, что ваш создать заявление т.е. db.execSQL(DATABASE_CREATE); отражает новую структуру таблицы базы данных, а не старая, т.е. с новой колонкой TAG.

+0

Хорошо, я могу это сделать. Я смущен, почему мне нужно добавить его там, когда оператор onUpgrade также добавляет столбец. private static final String DATABASE_ALTER_TAG = "ALTER TABLE walk_run_table ADD COLUMN TAG TEXT;"; – seekingStillness

+1

Поскольку onupgrade не вызывается при новой установке. Его призыв к onUpgrade только, простой, как это –