【玩轉SQLite系列】(二)SQLite創建和打開數據庫的三種方式

轉載請註明出處:http://blog.csdn.net/linglongxin24/article/details/53234396
本文出自【DylanAndroid的博客】


【玩轉SQLite系列】(二)SQLite創建和打開數據庫的三種方式

在上一篇 【玩轉SQLite系列】(一)初識SQLite,重拾sql語句 中已經簡單瞭解了下SQLite,不瞭解的可以去看一下。
我們發現,在Android中使用SQLite數據庫的時候,創建和打開數據庫的時候不止繼承SQLiteOpenHelper
這一種方式。目前我至少發現了三種方式:

1.自定義一個類繼承SQLiteOpenHelper;

2.使用Context.openOrCreateDatabase();

3.SQLiteDatabase.openOrCreateDatabase();

那麼這三種方式到底有什麼不同?

第一種方式:繼承SQLiteOpenHelper打開或創建數據庫

特點:可以在升級數據庫版本的時候在回調函數裏面做相應的操作

  • 1.創建MySQLiteOpenHelper類
package cn.bluemobi.dylan.sqlite;

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

import java.util.logging.Logger;

/**
 * Android操作使用SQLite的幫助類
 * Created by dylan on 2016-11-19.
 */

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    private final String TAG = "MySQLiteOpenHelper";

    /**
     * 構造函數
     * 一般用於在這裏創建數據庫,指定表名和版本號等
     *
     * @param context 上下文對象
     * @param name    數據庫名稱
     * @param factory 遊標工程
     * @param version 數據版本號 >=1
     */
    public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        Log.d(TAG, "MySQLiteOpenHelper");
    }

    /**
     * 創建數據庫時調用
     * <p>
     * 一般用於在創建數據表
     *
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(TAG, "onCreate");
    }

    /**
     * 數據庫升級更新時調用
     *
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.d(TAG, "onUpgrade");
    }
}
  • 2.創建數據庫
   /**
     * 第一種方式:繼承SQLiteOpenHelper打開或創建數據庫
     * 特點:可以在升級數據庫版本的時候在回調函數裏面做相應的操作
     *
     * @param v
     */
    public void sQLiteOpenHelper(View v) {
        /**指定數據庫的表名爲info.db,版本號爲1**/
        MySQLiteOpenHelper mySQLiteOpenHelper = new MySQLiteOpenHelper(this, Contacts.DATABASE_NAME, null, Contacts.DATABASE_VERSION);
        /**得到一個可寫的數據庫SQLiteDatabase對象**/
        SQLiteDatabase sqLiteDatabase = mySQLiteOpenHelper.getWritableDatabase();
        /**查看改對象做添加的數據庫**/
        showDataBase(sqLiteDatabase);
    }
  • 3.查看數據庫文件是否創建成功

由於我用的是真機測試,而且沒有Root,所以暫時採用這種方式去查看數據庫文件是否創建成功

       /**
        * 查看手機中由SQLiteDatabase創建的的數據庫文件
        */
       public void showDataBase(SQLiteDatabase sqLiteDatabase) {
           List<Pair<String, String>> ll = sqLiteDatabase.getAttachedDbs();
           for (int i = 0; i < ll.size(); i++) {
               Pair<String, String> p = ll.get(i);
               Log.d(Contacts.TAG, p.first + "=" + p.second);
           }
       }
  • 4.打印結果

    11-19 20:58:51.845 3422-3422/cn.bluemobi.dylan.sqlite D/SQLite: main=/data/data/cn.bluemobi.dylan.sqlite/databases/info.db

可以看出info.db數據庫文件已經成功創建。

第二種方式:Context.openOrCreateDatabase打開或創建數據庫

特點:可以指定數據庫文件的操作模式

  • 實現代碼
    /**
     * 第二種方式:Context.openOrCreateDatabase打開或創建數據庫
     * 特點:可以指定數據庫文件的操作模式
     *
     * @param v
     */
    public void context(View v) {
        /**指定數據庫的名稱爲info2.db,並指定數據文件的操作模式爲MODE_PRIVATE**/
        SQLiteDatabase sqLiteDatabase = this.openOrCreateDatabase(Contacts.DATABASE_NAME2, MODE_PRIVATE, null);
        /**查看改對象所創建的數據庫**/
        showDataBase(sqLiteDatabase);
    }
  • 查看數據庫文件是否創建成功

    11-19 21:08:30.732 3422-3422/cn.bluemobi.dylan.sqlite D/SQLite: main=/data/data/cn.bluemobi.dylan.sqlite/databases/info2.db

第三種方式:SQLiteDatabase.openOrCreateDatabase打開或創建數據庫

特點:可以指定數據庫文件的路徑

  • 實現代碼
    /**
     * 第三種方式:SQLiteDatabase.openOrCreateDatabase打開或創建數據庫
     * 特點:可以指定數據庫文件的路徑
     *
     * @param v
     */
    public void sQLiteDatabase(View v) {
        File dataBaseFile = new File(Environment.getExternalStorageDirectory() + "/sqlite", Contacts.DATABASE_NAME3);
        if (!dataBaseFile.getParentFile().exists()) {
            dataBaseFile.mkdirs();
        }
        SQLiteDatabase sqLiteDatabase = SQLiteDatabase.openOrCreateDatabase(dataBaseFile, null);
        showDataBase(sqLiteDatabase);
    }
  • 查看數據庫文件是否創建成功

    11-19 21:09:32.767 3422-3422/cn.bluemobi.dylan.sqlite D/SQLite: main=/storage/emulated/0/sqlite/info3.db

最後我們通過查閱源碼發現,其實繼承SQLiteOpenHelper和Context.openOrCreateDatabase最後都是會調用SQLiteDatabase.openOrCreateDatabase去實現對數據庫的操作。

發佈了134 篇原創文章 · 獲贊 73 · 訪問量 63萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章