Страницы

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

воскресенье, 15 марта 2020 г.

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

#java #android


Я немного не понимаю. При вызове (а точнее создании базы данных), разве не должен
вызываться метод 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, а метод не запускается. Это нормально или так не должно быть?
    


Ответы

Ответ 1



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

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

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