Страницы

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

среда, 5 июня 2019 г.

Android, SQLite, создание базы данных

Я немного не понимаю. При вызове (а точнее создании базы данных), разве не должен вызываться метод onCreate? Вот код базы данных:
public class DBHelper extends SQLiteOpenHelper { String name; final String TAG = "APP"; final String MSG = "БАЗА ДАННЫХ: ";
public DBHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, 1); }
public DBHelper(Context context, String name) { super(context, name, null, 1); this.name = name; }
@Override public void onCreate(SQLiteDatabase db) { Log.i(TAG, MSG + "создание таблицы " + name);
if (name.equals("dictionaries")) { db.execSQL("create table " + name + " (" + BaseColumns._ID + " integer primary key autoincrement, " + "dictionary" + " String);"); } else { Log.i(TAG, MSG + "создание таблицы 1"); db.execSQL("create table " + name + "_verb" + " (" + BaseColumns._ID + " integer primary key autoincrement, " + "last" + " String, " + "currently" + " String, " + "next" + " String, " + "translate + String);"); Log.i(TAG, MSG + "создание таблицы 2"); db.execSQL("create table " + name + "_noun" + " (" + BaseColumns._ID + " integer primary key autoincrement, " + "word" + " String, " + "translate" + " String);"); Log.i(TAG, MSG + "создание таблицы 3"); db.execSQL("create table " + name + "_phrase" + " (" + BaseColumns._ID + " integer primary key autoincrement, " + "phrase" + " String, " + "translate" + " String);"); } }
@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
После вызова несуществующей таблицы, в лог выводит сообщение только из конструктора DBHelper, а метод не запускается. Это нормально или так не должно быть?


Ответ

Согласно тык и тык
Проблема здесь в том, что в конструкторе вы явно не вызываете метод onCreate() и в конструкторе супер-класса этого вызова тоже нет. Чтобы его вызвать вы можете просто в коде вызвать методы получения объекта БД и она будет создана, если ещё не создана (т.е. будет вызван метод onCreate())
DBHelper dBHelper = new DBHelper(getContext()); dBHelper.getWritableDatabase(); //или //dBHelper.getReadableDatabase();

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

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