Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Не создается таблица sqlite при обновлении приложения

#android #sqlite


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.predmet_zapis);
    dbHelper = new DBHelper(this);

    ed1 = (EditText) findViewById(R.id.et_predmet);
    bt1 = (Button) findViewById(R.id.but1);
    bt1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            bd = dbHelper.getWritableDatabase();
            ContentValues cv = new ContentValues();
            String chisl1 = ed1.getText().toString();
            cv.put("chisl", chisl1);
            long rowID = bd.insert("mypoints", null, cv);
            Log.d("LOG_TAG", "row inserted, ID = " + rowID);
            dbHelper.close();
        }
    });
}

public class DBHelper extends SQLiteOpenHelper {

public DBHelper(Context context) {
    // конструктор суперкласса
    super(context, "myDB", null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    // создаем таблицу с полями
    Log.d("123","cоздана БД");
    db.execSQL("create table mypoints ("
            + "id integer primary key autoincrement,"
            + "chisl text"+");");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}


Пытаюсь создать БД, но не создается. Пишет "no such table: mypoints".

Удалил приложение с телефона, заново установил - заработало, но после того как решил
поменять название таблицы, перестало работать с той же ошибкой, почему так?
    


Ответы

Ответ 1



onCreate вызывается когда нет БД. При обновлении приложения БД уже существует и onCreate не вызывается, следовательно новая таблица не создаётся. Если вы решили изменить структуру БД, то нужно увеличить номер версии БД в вызове родительского конструктора: super(context, "myDB", null, 2); И в функцию onUpgrade добавить логику: что делать для приведения старой БД к новой структуре: @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if(oldVersion < 2) { db.execSQL("alter table mytable rename to mypoints;"); } }

Комментариев нет:

Отправить комментарий