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。