Android資料的四種儲存方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite,androidsqlite

來源:互聯網
上載者:User

Android資料的四種儲存方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite,androidsqlite

SQLite是一種轉為嵌入式裝置設計的輕型資料庫,其只有五種資料類型,分別是:

    NULL: 空值

    INTEGER: 整數

    REAL: 浮點數

    TEXT: 字串

    BLOB: 大資料

  在SQLite中,並沒有專門設計BOOLEAN和DATE類型,因為BOOLEAN型可以用INTEGER的0和1代替true和false,而DATE類型則可以擁有特定格式的TEXT、REAL和INTEGER的值來代替顯示,為了能方便的操作DATE類型,SQLite提供了一組函數,詳見:http://www.sqlite.org/lang_datefunc.html。這樣簡單的資料類型設計更加符合嵌入式裝置的要求。關於SQLite的更多資料,請參看:http://www.sqlite.org/

  在Android系統中提供了android.database.sqlite包,用於進行SQLite資料庫的增、刪、改、查工作。其主要方法如下:

  beginTransaction(): 開始一個事務。

  close(): 關閉串連,釋放資源。

  delete(String table, String whereClause, String[] whereArgs): 根據給定條件,刪除合格記錄。

  endTransaction(): 結束一個事務。

  execSQL(String sql): 執行給定SQL語句。

  insert(String table, String nullColumnHack, ContentValues values): 根據給定條件,插入一條記錄。 

  openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory): 根據給定條件串連資料庫,如果此資料庫不存在,則建立。

  query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy): 執行查詢。

  rawQuery(String sql, String[] selectionArgs): 根據給定SQL,執行查詢。

  update(String table, ContentValues values, String whereClause, String[] whereArgs): 根據給定條件,修改合格記錄。

  除了上訴主要方法外,Android還提供了諸多實用的方法,總之一句話:其實Android訪問資料庫是一件很方便的事兒。

  一、 建立資料庫

  通過openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)方法建立資料庫。    

1 SQLiteDatabase db =this.openOrCreateDatabase("test_db.db", Context.MODE_PRIVATE, null);
2 SQLiteDatabase db2 = SQLiteDatabase.openOrCreateDatabase("/data/data/com.test/databases/test_db2.db3", null);

  如上兩種方式均能建立資料庫,this.openOrCreateDatabase是對SQLiteDatabase.openOrCreateDatabase而來,如代碼所見,原生的SQLiteDatabase.openOrCreateDatabase()方法第一參數要求輸入絕對路勁,而所有的資料庫都是儲存於“data/data/應用報名/databases”目錄下,所以輸入完全的絕對路勁是一件重複且繁雜的工作。採用this.openOrCreateDatabase則省去了此操作。執行操作後的結果如:  

 

  另外還可以通過寫一個繼承SQLiteOpenHelper類的方式建立資料庫,此種方式是一種更加進階的建立方式,所以在此不做描述。

  二、建立資料表,插入資料。

  Android系統並沒有提供特別的建立資料表的方法,資料表通過SQL語句建立,代碼如下:

1 db.execSQL("create table tab(_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL)");

  表建立好之後,通過insert(String table, String nullColumnHack, ContentValues values)方法插入資料,其中參數含義分別為:

    table: 目標表名

    nullColumnHack: 指定表中的某列列名。因為在SQLite中,不允許不允許插入所有列均為null的記錄,因此初始值有值為空白時,此列需顯式賦予null

    values: ContentValues對象,類似於java中的Map。以索引值對的方式儲存資料。

  資料插入代碼如下: 

1  ContentValues values =new ContentValues();
2 for(int i=0;i<10;i++){
3 values.put("name", "test"+ i);
4 db.insert("tab", "_id", values);
5 }

 

  執行此操作後,會新增一個名為“tab”的資料表,利用SQLite用戶端(推薦:SQLite Expert Personal 3)可輕鬆查看此表結構和資料。如:

  

  三、修改資料

   update(String table, ContentValues values, String whereClause, String[] whereArgs)方法用於修改資料,其四個參數的具體含義如下:

    table: 目標表名

    values: 要被修改成為的新值

    whereClause: where子句,除去where關鍵字剩下的部分,其中可帶?預留位置。如沒有子句,則為null。

    whereArgs: 用於替代whereClause參數中?預留位置的參數。如不需傳入參數,則為null。

  資料修改代碼如下:

1 ContentValues values =new ContentValues();
2 values.put("name", "name");
3 db.update("tab", values, "_id=1", null);
4 db.update("tab", values, "_id=?", new String[]{"5"});

 

  執行結果如,_id=1和_id=5的資料,name欄位的值被修改為了“name”。

  四、查詢資料。

  之前一直使用SQLite用戶端查看資料情況了,這裡就使用android提供的query()和rowQuery()方法執行查詢。具體代碼如下:  

 

 1 Cursor c = db.query("tab", null, null, null, null, null, null);
2 c.moveToFirst();
3 while(!c.isAfterLast()){
4 int index = c.getColumnIndex("name");
5 Log.d("SQLite", c.getString(index));
6 c.moveToNext();
7 }
8 c = db.rawQuery("select * from tab", null);
9 c.moveToFirst();
10 while(!c.isAfterLast()){
11 int index = c.getColumnIndex("name");
12 Log.d("SQLite", c.getString(index));
13 c.moveToNext();
14 }

  查詢結果如:

  可以清晰的在查詢結果中,紅線上下的資料是完全一致的,也就是說query和rawQuery方法在的不同僅僅在於所需參數的不同。rawQuery方法需要開發人員手動寫出查詢SQL,而query方法是由目標表名、where子句、order by子句、having子句等諸多子句由系統組成SQL語句。兩方法同返回Cursor對象,所以兩方在使用時孰優孰劣,就看具體情況了。本人更喜歡rawQuery的方式,因為此方式更接近傳統Java開發,也可以由專業DBA來書寫SQL語句,這樣更符合MVC的思想,而且這樣的代碼可讀性更高。(query方法裡面參數實在太多,有點記不住誰是order by子句,誰是having子句了)

  Cursor對象可以理解為遊標對象,凡是對資料有所瞭解的人,相信對此對象都不會陌生,在這裡機不再累述。只提醒一點,在第一次讀取Cursor對象中的資料時,一定要先移動遊標,否則此遊標的位置在第一條記錄之前,會引發異常。

  五、刪除資料

  刪除資料也是一件很簡單的事,只需要調用delete方法,傳入參數即可,delete(String table, String whereClause, String[] whereArgs)的參數三個參數具體含義如下:

    table: 目標表名

    whereClause: where子句,除去where關鍵字剩下的部分,其中可帶?預留位置。如沒有子句,則為null。

 

    whereArgs: 用於替代whereClause參數中?預留位置的參數。如不需傳入參數,則為null。

 

  具體代碼如下:

db.delete("tab", "_id=? or name=?", new String[]{"8", "name"});

 

  執行結果如下:

 

 

  其中_id=8和name=‘name’的資料統統被刪除了。

  整個資料庫的CRUD操作到此示範完了。最後提醒一點,在操作完資料後,一定要記得調用close()方法關閉串連,釋放資源。這個原因相信大家都是懂的。

 

相關連結:

  Android資料的四種儲存方式SharedPreferences、SQLite、Content Provider和File (一)——總覽

  Android資料的四種儲存方式SharedPreferences、SQLite、Content Provider和File (三)—— SharedPreferences

  Android資料的四種儲存方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider

 

 

歡迎加入成都-Android群:






新開部落格:http://lyjbk.com


================================================================= 
親,如果您覺得本人此博文對你有用,請不要吝嗇自己的滑鼠,給此博文一個“推薦”吧。 

本博文系本部落客原創,著作權歸本部落客所有,如需轉載,請註明轉載地址。 
部落格原始地址:wisekingokok.cnblogs.com 
================================================================= 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.