Android 數據存儲和IO——SQLite(二)

接着上篇博文,這一篇主要說的SQLite。

二:SQLite數據庫
 1. Android的SQLite數據庫只是一個文件,我們可以把它看做是一個更爲便捷的文件操作。Android提供了SQLiteDatabase代表一個數據庫,一旦應用程序獲得了代表指定數據庫的SQLiteDatabase對象,接下來就可通過SQLiteDatabase對象來管理、操作數據庫了。
 

SQLiteDatabase提供的靜態的方法來打開一個文件對應的數據庫:
  a. static SQLiteDatabase openDatabase(String path,SQLiteDatabase.CursorFactory factory,int flags):打開path文件所代表的SQLite數據庫。
  b. static SQLiteDatabase openOrCreateDatabase(File file,SQLiteDatabase.CursorFactory factory):打開或創建(如果不存在)file文件所代表的SQLite數據庫。
  c. static SQLiteDatabase openOrCreateDababase(String path,SQLiteDabase.CursorFactory factory):打開或創建(如果不存在)path文件所代表的SQLiteDatabase數據庫。

 在獲取到SQLiteDatabase對象後,接下來就可調用SQLiteDatabase的如下方法來操作數據庫了。
  a. execSQL(String sql,Object[] bindArgs):執行帶佔位符的SQL語句。
  b. execSQL(String sql):執行SQL語句。
  c. insert(String table,String nullColumnHack,ContentValues values):向執行表中插入數據。
  d. update(String table,ContentValues,values,String whereClaues,String[] whereArgs):更新指定表中的特定數據。
  e. delete(String table,String whereClaues,String[] whereArgs):刪除指定表中的特定的數據。
  f. Cursor query(String table,String[] columns,String selection,String [] selectionArgs,String groupBy,String having,String orderBy):對執行數據表執行查詢。
  g. Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit):對執行數據表執行查詢。limit參數控制最多查詢幾條記錄(控制分頁的參數)
  h. Cursor query(boolean distinct,String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit):對指定表執行

查詢語句。其中第一個參數控制是否去除重複值。
  i. rawQuery(String sql,String[] seletionArgs):執行帶佔位符的SQL查詢。
  j. beginTransaction():開始事務。
  k. endTransaction():結束事務。
 

上面的查詢方法都返回一個Cursor對象。Cursor提供瞭如下的方法來移動查詢結果的記錄指針。
   a. move(int offset):將記錄指針向上或向下移動指定的行數。offset爲正數就是向下移動;爲負數就是向上移動。
   b. boolean moveToFirst():將記錄指針移動到第一行,如果移動成功則返回true.
   c. boolean moveToLast():將記錄指針移動到最後一行,如果移動成功則返回true.
   d. boolean movwToNext():將記錄指針移動到下一行,如果移動成功則返回true.
   e. boolean movePosition(int position):將記錄指針移動到指定的行,如果移動成功則返回true.
   f. boolean moveToPrevious():將記錄指針移動到上一行,如果移動成功則返回true,
  

一旦將記錄指針移動到指定的行後,接下來就可以調用Cursor的getXxx()方法來獲取該行的指定列的數據。
  SQLiteDatabase的execSQL方法可執行任意的SQL語句,包括帶佔位符的SQL語句。但由於該方法沒有返回值,一般用於執行DDL語句或DML語句;如果需要執行查詢語句,則可調用SQLiteDatabase的rawQuery(String sql,String[] selectionArgs)方法。
 

 一般可以將查詢的結果Cursor封裝成SimpleCursorAdapter,這個SimpleCursorAdapter實現了Adapter接口,因此可以作爲ListView或GridView的內容適配器。
  SimpeCursoeAdapter的構造器參數與SimpleAdapter的構造器參數大致相同,區別是SimpleAdapter負責封裝集合元素爲Map的List,而SimpleCursorAdapter負責封裝Cursor:如果我們把Cursor裏的結果集當成List集合,Cursor裏的每一行當成Map處理(以數據列的列名爲key,數據列的值爲value),那麼SimpleCursorAdapter與SimpleAdapter就統一起來了。
  另外一點是:使用SimpleCursorAdapter封裝了Cursor時要求底層數據表的主鍵列的列名爲_id,因爲SimpleCursorAdapter只能識別列名爲_id的主鍵。因此創建數據庫表時要指定主鍵的列名爲_id.

   總結起來使用SQLiteDatabase進行數據庫操作的步驟如下:
   a. 獲取SQLiteDatabase對象,它代表了與數據庫的連接。
   b. 調用SQLiteDatabase的方法來執行SQL語句。
   c. 操作SQL語句的執行結果,比如用SimpleCursorAdapter封裝Cursor。
   d. 關閉SQLiteDatabase,回收資源。

2. 使用特定的方法操作SQLite數據庫
   Android提供了insert,update,delete,query語句來操作數據庫。
 a. 使用insert方法插入記錄:
    SQLiteDatabase的insert方法的簽名爲long insert(String table,String nullColumnHack,ContentValues values),參數說明:
     table:代表想插入數據的表名。
     nullColumnHack:代表強行插入null值的數據列的列名。
     values:代表一行記錄的數據。
    insert方法插入的一行記錄使用ContentValues存放,ContentVlaues類似於Map,它提供了put(String key,Xxx value)方法用於存入數據、getAsXxx(String key)方法用於取出數據。
   不管第三個參數是否包含數據,執行insert()方法總會添加一條記錄。
  b. 使用update方法更新記錄
  c. 使用delete方法刪除數據
  d. 使用query()方法查詢記錄

三、SQLiteOpenHelper類
  SQliteOpenHelper是Android提供的一個管理數據庫的工具類,可用於管理數據庫的創建和版本的更新。一般的用法是創建SQLiteOpenHelper的子類,並擴展它的onCreate(SQLiteDatabse db)和onUpgrade(SQLiteDatabse db,int oldVerson,int newVerson)方法。
 

SQLiteOpenHelper包含的常用的方法:
   a. synchronized SQLiteDatabase getReadableDatabse():以讀寫的方式打開數據庫對應的SQLiteDatabase對象。
   b. synchronized SQLiteDatabase gerWritableDatabase():以寫的方式打開數據庫對應的SQLiteDatabase對象。
   c. abstract void onCreate(SQLiteDatabase db):當第一次創建數據庫時回調該方法
   d. abstract void onUpgrade (SQLiteDatabase db,int oldVersion,int newVersion):當數據庫版本更新時回調該方法。
   e. synchronized void close():關閉所有打開的SQLiteDatabase
  因爲SQLiteOpenHelper提供了getReadableDatabase()、getWriteDatabase()兩個方法用於打開數據庫連接,並提供了close方法 來關閉數據庫連接,我們只要重寫它的戀歌抽象方法就可以:onCreate()和onUpgrade()

接下來,用一個實例來實現用SQLite來存儲數據:生詞本

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