Я немного смущен о onUpgrade. Я разрабатываю свое приложение, и в процессе разработки я изменил DATABASE_VERSION
пять раз, так что теперь это 6.onUpgrade() при недавно установленном приложении
Все прошло гладко до тех пор, пока я полностью не удалил приложение с моего телефона и не построил его снова. С тех пор я получаю ошибки, что ни одна из моих таблиц, которые я прошу, существует ...
Я думаю, что теперь, когда мой DATABASE_VERSION
в проекте установлен на 6, а недавно установленное приложение получает его на 6 на start, onUpgrade()
не вызывается.
Вопрос в том, как предоставить все мои запросы, заданные в методе onUpgrade для новых установок?
Я знаю, что onUpgrade()
называется тем, что называется getWritableDatabase()
. Но мое приложение падает на этой полосе:
Cursor spinner_cursor = db.rawQuery("SELECT value1 AS _id, value2 FROM tab2", null);
Что предшествует полоса:
SQLiteDatabase db = new DBHelper(this).getWritableDatabase();
я получаю эту ошибку в LogCat:
no such table: car (code 1): , while compiling: SELECT value1 AS _id, value2 FROM tab2
мой DBHelper.class выглядит
public class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "DataBase1";
private static final int DATABASE_VERSION = 6;
private static final String CREATE_QUERY =
"CREATE TABLE tab1 (id, value1, value2, etc)";
private static final String QUERY_2 =
"CREATE TABLE tab2 (id, value1, value2, etc)";
private static final String QUERY_3 =
"CREATE TABLE tab3 (id, value1, value2, etc)";
private static final String QUERY_4 =
"ALTER TABLE tab2 ADD COLUMN value3 VARCHAR(10) NULL";
private static final String QUERY_5 =
"ALTER TABLE tab2 ADD COLUMN value4 VARCHAR(10) NULL";
private static final String QUERY_6 =
"ALTER TABLE tab2 ADD COLUMN value5 VARCHAR(10) NULL";
private static final String QUERY_7 =
"ALTER TABLE tab3 ADD COLUMN value3 VARCHAR(10) NULL";
private static final String QUERY_8 =
"ALTER TABLE tab3 ADD COLUMN value4 VARCHAR(10) NULL";
private static final String QUERY_9 =
"ALTER TABLE tab3 ADD COLUMN value5 VARCHAR(10) NULL";
private static final String QUERY_10 =
"ALTER TABLE tab3 ADD COLUMN value6 VARCHAR(10) NULL";
private static final String QUERY_11 =
"ALTER TABLE tab3 ADD COLUMN value7 VARCHAR(10) NULL";
private static final String QUERY_12 =
"DROP TABLE tab3";
private static final String QUERY_13 =
"CREATE TABLE tab3 (id, value1, value2, etc)";
public DBHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
Log.e("DATABASE OPERATIONS", "Database created/opened");
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_QUERY);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 3) {
db.execSQL(QUERY_2);
db.execSQL(QUERY_3);
db.execSQL(QUERY_4);
db.execSQL(QUERY_5);
db.execSQL(QUERY_6);
}
if (oldVersion < 4) {
db.execSQL(QUERY_7);
db.execSQL(QUERY_8);
db.execSQL(QUERY_9);
db.execSQL(QUERY_10);
}
if (oldVersion < 5){
db.execSQL(QUERY_11);
}
if (oldVersion < 6){
db.execSQL(QUERY_12);
db.execSQL(QUERY_13);
}
Заранее благодарен!
Вы уже отпустили свое приложение? Если нет, то весь этот материал обновления не нужен. –
В 'onCreate()' вы должны создать все необходимые таблицы, а именно. 'tab2',' tab3' –
. Дело в том, что я удалил приложение, а затем сгенерировал apk и неадаптированное приложение. Это когда проблемы начинаются. Вы говорите, что я должен избавиться от всех этих изменений и воссоздать запросы и поместить все это в один и все в onCreate? Как это работает после выхода приложения? – relliz