天天看點

Android SQLite 資料庫詳細介紹(轉載)

我們在編寫資料庫應用軟體時,需要考慮這樣的問題:因為我們開發的軟體可能會安裝在很多使用者的手機上,如果應用使用到了SQLite資料庫,我們必須在使用者初次使用軟體時建立出應用使用到的資料庫表結構及添加一些初始化記錄,另外在軟體更新的時候,也需要對資料表結構進行更新。那麼,我們如何才能實作在使用者初次使用或更新軟體時自動在使用者的手機上建立出應用需要的資料庫表呢?總不能讓我們在每個需要安裝此軟體的手機上通過手工方式建立資料庫表吧?因為這種需求是每個資料庫應用都要面臨的,是以在Android系統,為我們提供了一個名為SQLiteOpenHelper的抽象類,必須繼承它才能使用,它是通過對資料庫版本進行管理來實作前面提出的需求。

下面我們來看一下Android SQLite 最常用的幾個類和那些方法:

一、SQLiteOpenHelper :

onCreate(SQLiteDatabase db);

     用于初次使用軟體時生成資料庫表。

當調用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法擷取用于操作資料庫的SQLiteDatabase執行個體的時候,

如果資料庫不存在,Android系統會自動生成一個資料庫,接着調用onCreate()方法,onCreate()方法在初次生成資料庫時才會被調用,

在onCreate()方法裡可以生成資料庫表結構及添加一些應用使用到的初始化資料

onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);

在資料庫的版本發生變化時會被調用,一般在軟體更新時才需改變版本号

getWritableDatabase();

getReadableDatabase();

兩方法都可以擷取一個用于操作資料庫的SQLiteDatabase執行個體。但getWritableDatabase() 方法以讀寫方式打開資料庫,一旦資料庫的磁盤空間滿了,資料庫就隻能讀而不能寫,倘若使用getWritableDatabase()打開資料庫就會出錯。getReadableDatabase()方法先以讀寫方式打開資料庫,如果資料庫的磁盤空間滿了,就會打開失敗,當打開失敗後會繼續嘗試以隻讀方式打開資料庫。

二、SQLiteDatabase:

1、db.insert(table, nullColumnHack, values)

第一個參數是表名稱,第二個參數是空列的預設值,第三個參數是ContentValues類型的一個封裝了列名稱和列值的Map;

2、db.delete(table, whereClause, whereArgs)

第一個參數是表名稱,第二個參數是删除條件,第三個參數是删除條件值數組

3、db.update(table, values, whereClause, whereArgs)

第一個參數是表名稱,第二個參數是更行列ContentValues類型的鍵值對(Map),第三個參數是更新條件(where字句),第四個參數是更新條件數組

4、db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy)(下面有對該方法詳細講解)

5、db.execSQL(sql) // 執行任何SQL語句

6、db.rawQuery(sql, selectionArgs)

對第四個方法詳細講解:

Cursor  query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)

各個參數的意義說明:

①table:表名稱

②columns:列名稱數組

③selection:條件字句,相當于where

④selectionArgs:條件字句,參數數組

⑤groupBy:分組列

⑥having:分組條件

⑦orderBy:排序列

⑧limit:分頁查詢限制

三、Cursor:

Cursor是一個遊标接口,提供了周遊查詢結果的方法,如移動指針方法move(),獲得列值方法getString()等.

Cursor遊标常用方法:

getCount()   總記錄條數

isFirst()     判斷是否第一條記錄

isLast()      判斷是否最後一條記錄

moveToFirst()    移動到第一條記錄

moveToLast()    移動到最後一條記錄

move(int offset)   移動到指定記錄

moveToNext()    移動到下一條記錄

moveToPrevious()    移動到上一條記錄

getColumnIndexOrThrow(String columnName)  根據列名稱獲得列索引

getInt(int columnIndex)   獲得指定列索引的int類型值

getString(int columnIndex)   獲得指定列縮影的String類型值

本文轉自 我不會抽煙 51CTO部落格,原文連結:http://blog.51cto.com/zhouhongyu1989/1283283,如需轉載請自行聯系原作者