android的SQLite介紹

1.SQLite簡介

SQLite一個非常流行的輕量級的嵌入式關係型數據庫,它在2000年由D. Richard Hipp 發佈,它支持SQL語言,並且只用很少的內存就有很好的性能,它可以減少應用程序管理數據的開銷,SQLite可移植性好、很容易使用、很小、高效而且可靠。此外它還是開源的,任何人都可以使用它。許多開源項目(Mozilla,PHP,Python)都使用了SQLite。

SQLite由以下幾個組件組成:SQL編譯器、內核、後端以及附件。SQLite通過虛擬機和虛擬數據庫引擎(VDBE),使調試、修改和擴展 SQLite的內核變得更加方便。

Android在運行時(run-time)集成了SQLite,所以每個Android應用程序都可以使用 SQLite 數據庫。目前在Android 系統中集成的是SQLite3 版本,SQLite不支持靜態數據類型,而是使用列關係。這意味着它的數據類型不具有表列屬性,而具有數據本身的屬性。當某個值插入數據庫時,SQLite將檢查它的類型。如果該類型與關聯的列不匹配,則SQLite 會嘗試將該值轉換成列類型。如果不能轉換,則該值將作爲其本身具有的類型存儲。

SQLite支持NULL、INTEGER、REAL、TEXT 和BLOB 數據類型。

例如:可以在Integer 字段中存放字符串,或者在布爾型字段中存放浮點數,或者在字符型字段中存放日期型值。但是有一種例外,如果你的主鍵是INTEGER,那麼只能存儲64位整數,當向這種字段中保存除整數以外的數據時,將會產生錯誤。另外, SQLite 在解析CREATE TABLE 語句時,會忽略CREATE TABLE 語句中跟在字段名後面的數據類型信息。

數據庫存儲在 data/data/package name/databases/數據庫名稱。

2.SQLite數據庫特點

1)零配置

SQlite3不用安裝、不用配置、不用啓動、關閉或者配置數據庫實例。當系統崩潰後不用做任何恢復操作,在下次使用數據庫的時候自動恢復。

2)可移植

它可以運行在Windows、Linux、BSD、Mac OS X 和一些商用Unix 系統,比如Sun 的Solaris、IBM 的AIX,同樣,它也可以工作在許多嵌入式操作系統下,比如Android、QNX、VxWorks、Palm OS、Symbin 和Windows CE。

3)緊湊

SQLite是被設計成輕量級、自包含的。一個頭文件、一個lib 庫,你就可以使用關係數據庫了,不用任何啓動任何系統進程。

4)簡單

SQLite有着簡單易用的API 接口。

5)可靠

SQLite的源碼達到100%分支測試覆蓋率。

3.SQLite與其它數據庫的區別:

SQLite基本上符合SQL-92標準,SQLite和其它數據庫最大的不同就是對數據類型的支持,創建一個表時,可以在CREATE  TABLE語句中指定某列的數據類型,但是你可以把任何數據類型放入任何列中。當某個值插入數據庫時,SQLite將檢查它的類型。如果該類型與關聯的列不匹配,則SQLite會嘗試將該值轉換成該列的類型。如果不能轉換,則該值將作爲其本身具有的類型存儲。比如:可以把一個字符串(String)放入INTEGER列,SQLite 稱這爲“弱類型”(manifest typing)。

此外,SQLite不支持一些標準的SQL功能,特別是外鍵約束(FOREIGN KEY constrains),嵌套 transcaction 和RIGHT OUTER JOIN和FULL OUTER JOIN,還有一些 ALTER TABLE 功能。

除了上述功能外,SQLite 是一個完整的SQL系統,擁有完整的觸發器,交易等等。

4.應用場景

Android使用SQLite作爲複雜數據的存儲引擎,開發應用程序時,有可能就要使用到SQLite來存儲大量的數據,對於Android平臺來說,系統內置了豐富的API來供開發人員操作SQLite,我們可以輕鬆的完成對數據的存取。

5.常用方法

c.move(int offset); //以當前位置爲參考,移動到指定行

c.moveToFirst();  //移動到第一行

c.moveToLast();    //移動到最後一行 

c.moveToPosition(int position);//移動到指定行 

c.moveToPrevious();//移動到前一行

c.moveToNext(); //移動到下一行 

c.isFirst();//是否指向第一條 

c.isLast();//是否指向最後一條 

c.isBeforeFirst();//是否指向第一條之前 

c.isAfterLast();//是否指向最後一條之後 

c.isNull(int columnIndex);//指定列是否爲空(列基數爲0) 

c.isClosed();//遊標是否已關閉 

c.getCount();//總數據項數

c.getPosition();//返回當前遊標所指向的行數

c.getColumnIndex(String columnName);//返回某列名對應的列索引值

c.getString(int columnIndex);//返回當前行指定列的值

最後當我們完成了對數據庫的操作後,記得調用SQLiteDatabase的close()方法釋放數據庫連接,否則容易出現SQLiteException。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章