http://blog.csdn.net/jason0539/article/details/16360835java
SQLite 一個很是流行的嵌入式數據庫,它支持 SQL 語言,而且只利用不多的內存就有很好的性能。此外它仍是開源的,任何人均可以使用它。許多開源項目((Mozilla, PHP, Python)都使用了 SQLite.程序員
SQLite 由如下幾個組件組成:SQL 編譯器、內核、後端以及附件。SQLite 經過利用虛擬機和虛擬數據庫引擎(VDBE),使調試、修改和擴展 SQLite 的內核變得更加方便。web
SQLite 基本上符合 SQL-92 標準,和其餘的主要 SQL 數據庫沒什麼區別。它的優勢就是高效,Android 運行時環境包含了完整的 SQLite。sql
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 系統,擁有完整的觸發器,交易等等。app
Android 在運行時(run-time)集成了 SQLite,因此每一個 Android 應用程序均可以使用 SQLite 數據庫。對於熟悉 SQL 的開發人員來時,在 Android 開發中使用 SQLite 至關簡單。可是,因爲 JDBC 會消耗太多的系統資源,因此 JDBC 對於手機這種內存受限設備來講並不合適。所以,Android 提供了一些新的 API 來使用 SQLite 數據庫,Android 開發中,程序員須要學使用這些 API。ide
數據庫存儲在 data/< 項目文件夾 >/databases/ 下。函數
Activites 能夠經過 Content Provider 或者 Service 訪問一個數據庫。下面會詳細講解若是建立數據庫,添加數據和查詢數據庫。工具
Android 不自動提供數據庫。在 Android 應用程序中使用 SQLite,必須本身建立數據庫,而後建立表、索引,填充數據。Android 提供了 SQLiteOpenHelper 幫助你建立一個數據庫,你只要繼承 SQLiteOpenHelper 類,就能夠輕鬆的建立數據庫。SQLiteOpenHelper 類根據開發應用程序的須要,封裝了建立和更新數據庫使用的邏輯。SQLiteOpenHelper 的子類,至少須要實現三個方法:
下面示例代碼展現瞭如何繼承 SQLiteOpenHelper 建立數據庫:
接下來討論具體如何建立表、插入數據、刪除表等等。調用 getReadableDatabase() 或 getWriteableDatabase() 方法,你能夠獲得 SQLiteDatabase 實例,具體調用那個方法,取決於你是否須要改變數據庫的內容:
上面這段代碼會返回一個 SQLiteDatabase 類的實例,使用這個對象,你就能夠查詢或者修改數據庫。
當你完成了對數據庫的操做(例如你的 Activity 已經關閉),須要調用 SQLiteDatabase 的 Close() 方法來釋放掉數據庫鏈接。
爲了建立表和索引,須要調用 SQLiteDatabase 的 execSQL() 方法來執行 DDL 語句。若是沒有異常,這個方法沒有返回值。
例如,你能夠執行以下代碼:
這條語句會建立一個名爲 mytable 的表,表有一個列名爲 _id,而且是主鍵,這列的值是會自動增加的整數(例如,當你插入一行時,SQLite 會給這列自動賦值),另外還有兩列:title( 字符 ) 和 value( 浮點數 )。 SQLite 會自動爲主鍵列建立索引。
一般狀況下,第一次建立數據庫時建立了表和索引。若是你不須要改變表的 schema,不須要刪除表和索引 . 刪除表和索引,須要使用 execSQL() 方法調用 DROP INDEX 和 DROP TABLE 語句。
上面的代碼,已經建立了數據庫和表,如今須要給表添加數據。有兩種方法能夠給表添加數據。
像上面建立表同樣,你可使用 execSQL() 方法執行 INSERT, UPDATE, DELETE 等語句來更新表的數據。execSQL() 方法適用於全部不返回結果的 SQL 語句。例如:
另外一種方法是使用 SQLiteDatabase 對象的 insert(), update(), delete() 方法。這些方法把 SQL 語句的一部分做爲參數。示例以下:
update()方法有四個參數,分別是表名,表示列名和值的 ContentValues 對象,可選的 WHERE 條件和可選的填充 WHERE 語句的字符串,這些字符串會替換 WHERE 條件中的「?」標記。update() 根據條件,更新指定列的值,因此用 execSQL() 方法能夠達到一樣的目的。
WHERE 條件和其參數和用過的其餘 SQL APIs 相似。例如:
delete() 方法的使用和 update() 相似,使用表名,可選的 WHERE 條件和相應的填充 WHERE 條件的字符串。
相似 INSERT, UPDATE, DELETE,有兩種方法使用 SELECT 從 SQLite 數據庫檢索數據。
1 .使用 rawQuery() 直接調用 SELECT 語句;
使用 query() 方法構建一個查詢。
Raw Queries
正如 API 名字,rawQuery() 是最簡單的解決方法。經過這個方法你就能夠調用 SQL SELECT 語句。例如:
在上面例子中,咱們查詢 SQLite 系統表(sqlite_master)檢查 table 表是否存在。返回值是一個 cursor 對象,這個對象的方法能夠迭代查詢結果。
若是查詢是動態的,使用這個方法就會很是複雜。例如,當你須要查詢的列在程序編譯的時候不能肯定,這時候使用 query() 方法會方便不少。
Regular Queries
query() 方法用 SELECT 語句段構建查詢。SELECT 語句內容做爲 query() 方法的參數,好比:要查詢的表名,要獲取的字段名,WHERE 條件,包含可選的位置參數,去替代 WHERE 條件中位置參數的值,GROUP BY 條件,HAVING 條件。
除了表名,其餘參數能夠是 null。因此,之前的代碼段能夠可寫成:
無論你如何執行查詢,都會返回一個 Cursor,這是 Android 的 SQLite 數據庫遊標,使用遊標,你能夠:
經過使用 getCount() 方法獲得結果集中有多少記錄;
經過 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍歷全部記錄;
經過 getColumnNames() 獲得字段名;
經過 getColumnIndex() 轉換成字段號;
經過 getString(),getInt() 等方法獲得給定字段當前記錄的值;
經過 requery() 方法從新執行查詢獲得遊標;
經過 close() 方法釋放遊標資源;
例如,下面代碼遍歷 mytable 表
若是你想要開發 Android 應用程序,必定須要在 Android 上存儲數據,使用 SQLite 數據庫是一種很是好的選擇。本文介紹瞭如何在 Android 應用程序中使用 SQLite 數據庫 ,主要介紹了在 Android 應用程序中使用 SQLite 建立數據庫和表、添加數據、更新和檢索數據,還介紹了比較經常使用的 SQLite 管理工具,經過閱讀本文,你能夠在 Android 中輕鬆操做 SQLite 數據庫。
做者:jason0539
微博:http://weibo.com/2553717707
博客:http://blog.csdn.net/jason0539(轉載請說明出處)