Android-MySQLiteOpenHelper的理解

MySQLiteOpenHelper:

package com.esandinfo;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class MySQLiteOpenHelper extends SQLiteOpenHelper {

    public static MySQLiteOpenHelper mySQLiteOpenHelper;

    private static final String DB_NAME = "person_info.db";
    private static final int VERSION = 1;

    public synchronized static MySQLiteOpenHelper getInstance(Context context) {
        if (null == mySQLiteOpenHelper) {
            mySQLiteOpenHelper = new MySQLiteOpenHelper(context, DB_NAME, null, VERSION);
        }
        return mySQLiteOpenHelper;
    }

    /**
     * 當開發者調用 getReadableDatabase(); 或者 getWritableDatabase();
     * 就會經過此構造方法配置的信息 來建立 person_info.db 數據庫
     * 因此此構造方法的配置信息,能夠認爲是給建立 person_info.db 數據庫 準備的
     *
     * @param context 上下文
     * @param name    數據庫名
     * @param factory 遊標工廠
     * @param version 版本,最低爲1
     */
    private MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    /**
     * 此方法是什麼時候調用? ,是須要開發者調用 getReadableDatabase(); 或者 getWritableDatabase();
     *
     * 注意:此onCreate方法只會被執行一次,由於當開發者調用 getReadableDatabase(); 或者 getWritableDatabase();
     *      是先建立好 person_info.db,而後在執行此onCreate方法,只執行一次onCreate方法
     *      因此(若是建立好 person_info.db後,onCreate方法裏面的創表失敗,那麼一直不會執行onCreate方法了)
     *      因此(若是建立好 person_info.db後,onCreate方法裏面的創表成功,那麼也一直不會執行onCreate方法了)
     *      因此onCreate方法的特色是,只在 建立person_info.db後,而後執行一次onCreate方法,後續就不執行onCreate方法了
     *
     * @param db 可執行SQL語句
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d("db", "onCreate() >>>>>>>>>>>>>> ");
        db.execSQL("create table student_table(_id integer primary key autoincrement, name text, age integer);");
    }

    /**
     * 此方法用於數據庫升級
     * @param db 可執行SQL語句
     * @param oldVersion 之前舊版本的版本號
     * @param newVersion 如今目前最新的版本號
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }


}

 

@Override
    public void onClick(View view) {

        MySQLiteOpenHelper mySQLiteOpenHelper = MySQLiteOpenHelper.getInstance(this);

        /**
         * 【第一次調用】
         *
         *  調用getReadableDatabase() 或者 getWritableDatabase(); 的時候,作了兩件事
         *
         *  第一件事:
         *   person_info.db數據庫會被建立:怎麼去建立呢?
         *      答:根據SQLiteOpenHelper super(context, name, factory, version); 傳遞的數據庫信息,而後內部建立數據庫
         *
         *  第二件事:
         *   student_table表會被建立:怎麼去建立呢?
         *      答:是先執行好了[第一件事] 而後立刻就執行onCreate建立 student_table表;
         */

        /**
         * 【第二次調用,或者 第N此調用,反正不是第一次調用了】
         *
         *  調用getReadableDatabase() 或者 getWritableDatabase(); 的時候,作一件事
         *
         *  第一件事:
         *   person_info.db數據庫會被打開?
         *      答:根據SQLiteOpenHelper super(context, name, factory, version); 傳遞的數據庫信息,而後內部打開數據庫
         *
         *  注意:因爲 數據庫已經存在,是不會執行onCreate方法的
         *
         */

        mySQLiteOpenHelper.getWritableDatabase();
}
相關文章
相關標籤/搜索