SQLite DatabaseHelper класс - PullRequest
       1

SQLite DatabaseHelper класс

3 голосов
/ 07 июля 2011

когда мы создаем базу данных SQLite из приложения Android, мы можем использовать класс DatabaseHelper, который расширяет SQLiteOpenHelper.

Мой конструктор выглядит следующим образом

public DatabaseHelper(Context context)  
{
      super(context, dbName, null, DATABASE_VERSION);  
}

Затем метод onCreate ()

public void onCreate(SQLiteDatabase db) 
{
    String qry = "CREATE TABLE DEPT(dept_id INTEGER PRIMARY KEY, deptName TEXT)";   
    db.execSQL(qry);
    InsertDepts(db); 
}

Но когда я создаю экземпляр класса DatabaseHelper, моя база данных еще не создана.

Я полагаю, что когда я создаю Object из этого класса, конструктор выполняется, и поскольку база данных еще не создана, он создаст базу данных и выполнит метод onCreate (). Поэтому, безусловно, база данных должна быть создана.

Или до тех пор, пока мы не выполним следующий код, он не выполнит метод onCreate (), даже если мы создадим объект из класса.

databaseHelper.getWritableDatabase()

Может ли кто-нибудь объяснить порядок выполнения класса databasehelper.

Ответы [ 3 ]

1 голос
/ 07 июля 2011

Вы создаете экземпляр вашего DatabaseHelper -класса, который вызывает выполнение конструктора.Конструктор выполнит конструктор родительских классов (SQLiteOpenHelper), который затем проверит, существует ли файл базы данных.

Если он существует, ничего не делается, и ваш объект создан.

Если он не существует, создается файл базы данных и вызывается метод onCreate.

Вы говорите, что ваша база данных не существует.Вы получаете какие-либо ошибки в LogCat?Кроме того, вы пытались получить доступ к базе данных с помощью adb ?

0 голосов
/ 07 июля 2011

пожалуйста, обратитесь к этому

http://androidforbeginners.blogspot.com/2010/01/creating-multiple-sqlite-database.html

0 голосов
/ 07 июля 2011

Порядок должен быть таким ( как гласит SQLiteOpenHelper javadoc )

  1. Конструктор
  2. Во время первого звонка openReadableDatabase() или openWritableDatabase() будет называться onCreate
  3. Тогда будет называться onOpen

Добавлена ​​

Только что проверил источники конструктора SQLiteOpenHelper, и он читает:

public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) {
        if (version < 1) throw new IllegalArgumentException("Version must be >= 1, was " + version);

        mContext = context;
        mName = name;
        mFactory = factory;
        mNewVersion = version;
    }

Напротив, openReadableDatabase / OpenWritableDatabase sources состоит из вызовов openOrCreateDatabase(), поэтому конструктор не вызывает onCreate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...