SQLite數據庫存儲--創建、升級數據庫

SQLite數據庫存儲--創建、升級數據庫

SQLite是一款輕量級的關系型數據庫

創建數據庫

Android為了讓我們能夠更加方便的管理數據庫,專門提供了一個SQLiteOpenHelper幫助類,借助這個類就可以簡單地對數據庫進行創建和升級

創建、升級數據庫函數

SQLiteOpenHelper類是一個抽象類,SQLiteOpenHelper類中有兩個抽象方法,分別是onCreate()onUpgrade()方法:

  • onCreate()方法是實現創建數據庫的邏輯,數據庫文件會存放在/data/data/(packageName)/database/目錄下
  • onUpgrade()方法是實現升級數據庫的邏輯,當實例化SQLiteOpenHelper子類對象時,傳入的參數version大于當前數據庫的版本號時,當調用getReadableDatabase()getWritableDatabase()時,就會調用此升級方法

獲取數據庫對象

SQLiteOpenHelper中還有兩個重要的實例方法,getReadableDatabase()getWritableDatabase()

  • 這兩個方法都可以創建或打開一個現有的數據庫(如果數據庫已存在則直接打開,否則創建一個新的數據庫<調用重寫的onCreate()方法>),并返回一個可對數據庫進行讀寫操作的對象
  • 當數據庫不可寫入的時候,getReadableDatabase()方法返回的對象將以只讀的方式打開數據庫,而getWritableDatabase()方法則會出現異常

SQLiteOpenHelper構造方法

繼承SQLiteOpenHelper,重寫構造函數(四個參數):
public DatabaseHalper(Context context, String name, CursorFactory factory, int version) {}

  • context:Context對象(上下文對象)。若程序在測試框架中測試代碼用于生成數據庫對象,則此時context對象可以利用函數getContext()獲得
  • name:數據庫名稱
  • factory:游標工廠,允許我們在查詢數據的時候返回一個自定義的Cursor,一般傳入null
  • version:當前數據庫的版本號

注意:SQLiteOpenHelper子類對象是必須和某個數據庫綁定起來的,當調用getReadableDatabase()getWritableDatabase()時,若數據庫已存在則返回數據庫對象;若數據庫不存在,則調用onCreate()方法,創建數據庫并返回數據庫對象

SQLite簡單知識

SQLite數據類型很簡單:
  • integer:表示整型;
  • real:表示浮點型
  • text:表示文本類型
  • blob:表示二進制類型
創建一個類繼承SQLiteOpenHelper
public class MyDatabaseHalper extends SQLiteOpenHelper {
    
    public static final String CREATE_BOOK = "create table Book ("
            + "id integer primary key autoincrement,"
            + "author text,"
            + "price real,"
            + "pages integer,"
            + "name text)";

    //定義一個Context
    private Context mContext;
    
    public MyDatabaseHalper(Context context, String name,
            CursorFactory factory, int version) {
        super(context, name, factory, version);
        //賦值語句
        mContext = context;
    }
    
    @Override
    public void onCreate(SQLiteDatabase db) {
        //執行SQL語句,創建數據庫表Book和Category
        db.execSQL(CREATE_BOOK);
    }
    
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
    
}
創建數據庫,邏輯代碼:
public class MainActivity extends Activity {
    
    private MyDatabaseHalper dbHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //實例化數據庫幫助類
        dbHelper = new MyDatabaseHalper(this, "BookStore.db", null, 1);
        
        Button createDatabase = (Button) findViewById(R.id.create_database);
        createDatabase.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
            /**
             *調用獲取數據庫對象的方法,若數據庫存在直接返回數據庫對象,不存在
             *則調用數據庫幫助類的onCreate()方法然后返回數據庫對象;若數據庫的版
             *本和當前版本一致則不調用onUpgrade()方法,若高于當前數據庫的版本
             *,則調用onUpgrade(),若低于當前數據庫的版本,則會拋出異常
             */
                dbHelper.getWritableDatabase();
            }
        });
    }
}

查看數據庫:

創建的數據庫
  • BookStore.db:即為新創建的數據庫
  • BookStore.db-journal:為了能讓數據庫能夠支持事務而產生的臨時日志文件,文件大小通常為0字節

使用adb shell 命令來查看數據庫:

  • 在SDK中的platform-tool目錄下有一個adb命令,在windows的環境變量中配置此路徑
  • 進入到adb shell命令


    進入shell命令
  • 進入到數據庫所在的文件目錄


    創建的數據庫
  • 進入數據庫,查詢數據庫表


    數據庫和表
  • 使用.exit命令即可退出shell命令
升級數據庫(添加一個數據庫表),邏輯代碼
  • 重寫SQLiteOpenHelper類中的onUpgrade()方法

    //添加創建數據庫表的語句
    public static final String CREATE_CATEGORY = "create table Category ("
            + "id integer primary key autoincrement,"                     
            + "category_name text,"                                       
            + "category_code integer)";                                   
    --
    //若數據庫表則刪除表
    db.execSQL("drop table if exists Book");
    db.execSQL("drop table if exists Category");
    //調用onCreate()方法
    onCreate(db);
    --
    //在onCreate()方法中添加創建數據庫表的代碼
    db.execSQL(CREATE_CATEGORY);
    
  • 在活動類中更改以下代碼

    //在實例化SQLiteOpenHelper類的時候,指定的version值大于當前數據庫的版本號即可,會自動調用onUpgrade()方法 
    dbHelper = new MyDatabaseHalper(this, "BookStore.db", null, 2);
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容