Страницы

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

вторник, 26 февраля 2019 г.

Не создается таблица 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".
Удалил приложение с телефона, заново установил - заработало, но после того как решил поменять название таблицы, перестало работать с той же ошибкой, почему так?


Ответ

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;"); } }

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

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