嚴謹一點說,SQLite在Android設備中可以被當做是一種數據存儲方法或者干脆就是一個數據庫
正如其他大多數平臺一樣,Android 也提供了幾種方法用來保存數據,使得這些數據即使在程序結束以后依然不會丟失。這些方法有:文本文件-可以保存在應用程序自己的目錄下(【譯者注】安裝的每個app都會在/data/data/目錄下創建個文件夾,名字和應用程序中AndroidManifest.xml文件中的package一樣),也可以保存在SDcard中;Preferences也是一種經常使用的數據存儲方法,因為它們對于用戶而言是透明的,并且從應用安裝的時候就存在了;另外,如果放寬點說的話,Assets也可以用來存儲一些只讀數據。Assets是指那些在assets目錄下的文件,這些文件在你將你的應用編譯打包之前就要存在,并且可以在應用程序運行的時候被訪問到。以后我會更加詳細的聊聊這些方法的細節。
然而,有時候我們需要對保存的數據進行一些復雜的操作,或者數據量很大,超出了文本文件和Preference的性能能hold住的范圍,所以需要一些更加高效的方法來管理。這時就需要一個移動平臺上的數據庫閃亮登場了。
從Android1.5(代號Cupcake)開始,Android就自帶SQLite(版本3.5.9+)了。如果你對SQLite不熟悉的話,就把它當成是一個獨立的,無需服務進程,支持事務處理,可以使用SQL語言的數據庫。盡管SQLite也有它的不足之處,但是在Android開發者的武器庫里,可以算是個殺手锏了。
本文中,我主要介紹在Android中使用SQLite的方法,著重介紹它的管理操作,具體而言,就是創建和更新(update)(【譯者注】這里說的更新操作不是說使用update語句更新數據庫數據的操作,而是修改數據庫結構的操作,本文中的update和upgrade都是這個意思,為避免混淆,后注原英文使用動詞),而不是那些運行時的操作。
管理SQLite
我們可以從創建一個繼承自SQLiteOpenHelper的類來管理SQLite開始探討這一話題,這個類有一個構造方法和另外兩個必須實現的方法,onCreate和onUpgrade方法.
很自然的,這些方法中第一個被執行的就是構造方法,在構造函數中調用父類的構造方法,同時傳入四個參數:
Context, 這表示應用程序的上下文,在構造函數中保存住,對以后的其他操作有用。
數據庫名稱,就是個文件名,表示數據庫物理文件名稱的字符串。
游標factory,如果提供的話,可以用來創建游標。
數據庫版本,這是你的數據庫的版本(用一個整數表示),稍后我會討論這個參數的細節。初始值為1。
在我們的例子中,我們的四個參數如下面代碼所示:
1
2
3
4
5
6
7
8
9
10
11
|
class DB extends SQLiteOpenHelper { final static int DB_VERSION = 1 ; final static String DB_NAME = "mydb.s3db" ; Context context; public DB(Context context) { super (context, DB_NAME, null , DB_VERSION); // Store the context for later use this .context = context; } |