轉載自 這裡
Preface :
SQLite 是一個開源的數據庫並在 Android 的 native library 與 application framework 中進行支援. 你可以使用標準的 SQL 語法對 SQLite 進行操作並支援 Prepared statements 與 Transactions. 除此之外, 它還有一個優點也是為什麼它會被手持裝置選擇為內建的數據庫, 就是在 runtime 時它使用的記憶體非常少, 約 250 kbytes.
在 Android 使用 SQLite 並不需要額外安裝或設置. 你只需要透過 SQL 來操作它即可. 透過 Application 提供的幾個有用的類別並可以完成操作, 後面會繼續討論這些類別. 另外在 Android 上使用數據庫操作需要對 I/O 進行操作因而會 slow down 程式的進行, 因此這裡建議使用 AsyncTask 方式來對數據庫進行操作. 相關主題可以參考這裡(Android Background Processing Tutorial for details).
SQLite 支援數據類型如 TEXT (similar to String in Java), INTEGER (similar to long in Java) 與 REAL (similar to double in Java). 所以在插進去數據庫並須做對應的類型轉換. 要注意的是 SQLite 本身並不會進行類型檢查, 因此你可能插入 integer 到 string 的欄位裡.
當你使用 SQLite 建立數據庫表格時, 所有的資料都會被儲存到目錄 "DATA/data/APP_NAME/databases/FILENAME". "DATA" 你可以使用 Environment.getDataDirectory() 來獲取. 而 "APP_NAME" 是你應用程序的名稱, "FILENAME" 則是你數據庫表的名稱. 通常你呼叫 Environment.getDataDirectory() 會返回 SD 卡的位置. 最後 SQLite 數據庫對所有的程序都是 private 也就是說你不能在程序間分享 SQLite 的資料. 但是有替代方案, 就是透過 Content Provider.
SQLiteOpenHelper :
要在 Android 中建立或是更新數據庫, 你可以透過類別 SQLiteOpenHelper. 在這個類別你可以 override 方法 onCreate() 來建立數據庫, 與方法 onUpgrade() 來更新數據庫. 而這兩個方法都會傳入一個類別 SQLiteDatabase.
SQLiteOpenHelper 提供方法 getReadableDatabase() 與 getWriteableDatabase() 來獲取 SQLiteDatabase 物件並進行數據庫 "讀" 與 "寫" 的操作. 而最後在處理 SQLite 數據庫時, 會以 "_id" 當作 primary key 的欄位使用.
SQLiteDatabase and Cursor :
SQLiteDatabase 提供方法 insert(), )]update() ,)]delete() 與 )]execSQL() 來執行 SQL 與操作數據庫. 詳細的操作使用說明, 請見 API.
查詢的建立可以透過方法 rowQuery(). 該方法接受傳入 SQL 語句 或是透過 query() 來提供介面使用動態的資料建立 SQL 語句. 最後是 SQLiteQueryBuilder.SQLiteQueryBuilder 通常使用於 ContentProviders. 而查詢後返回 Cursor 類別來操作結果數據.
類別 Cursor 代表查詢後的結果數據. 如果你要獲得查詢結果的總數可以使用方法 getCount(). 如果要在查詢數據列表中移動, 你可以使用方法 moveToFirst() 或 moveToNext() 並透過方法 isAfterLast() 知道是否已經走尋完畢. 另外你可以透過類別 SimpleCursorAdapter 來使用 ListView 操作查詢數據 Cursor. 關於 ListView 的操作範例, 你可以參考這裡.
Todo application :
接下來我們會建立一個 Android app "Todo" 來示範 SQLite 的使用. 該 App 允許用戶建立 待處理項目, 並用 SQLite 數據庫儲存這些項目. 而這個 App 將會由兩個 Activities 組成. 一個是用來檢視 待處理項目 清單, 另一個則是用來建立 待處理項目. 而這兩個 Activities 溝通則是透過 Intents.
在開始這個 App 之前, 假設你已經有了對 Android App 開發有了一定的基礎. 如果你是新手上路, 你可以閱讀 Android development tutorial 來對 Android App 開發有初步認識. 另外再開始下面的 App 前, 你可能也需要知道 Android Intents 與 Android ListView 是什麼. 而這個 App 執行後的 GUI 示圖如下 :
首先使用 Eclipse 建立專案 "TodosOverview", 並使用 Activity "TodoDetails". 接著我們來撰寫類別處理 database :
Based on this helper class we can write the class "TodoDbAdapter" which will provide the functionality to query, create and update todos. The method open() will open the database via the helper class. For updating and creating values we use the "android.content.ContentValues" class. This class allows to store key/values. You use the column names as the key in ContentValues and pass the object to the insert or update method of your database.
接著我們撰寫 "TodoDbAdapter" 來提供數據庫操作. 使用方法 open() 來建立數據庫, 並透過類別 android.content.ContentValues 來封裝數據庫表格的 key/values pairs. 接著我們使用這個類別儲存數據來對數據庫進行 insert 與 update 我們的數據庫 :
接著我們要往 MVC 的 V 移動, 我們知道 Android 透過 XML 對 GUI 的 Layout 與 上面的元件進行描述. 首先請建立 "listmenu.xml" :
接著我們在 Todo 有分兩種類型 "Reminder" 與 "Urgent", 我們將這兩個字串存在資源檔 "priority.xml" (在 "res/values") 裡 :
接著我們將在 App 有使用的 label 字串或標題存放於資源檔 "strings.xml" :
接著是 "todo_list.xml" 用來描述顯示 todo 清單的 GUI :
接著當我們點擊單一個 todo 項目時, 會有一個 GUI 來表示該項目, 該 GUI 的描述檔 todo_row.xml 如下 :
接著是編輯 todo 項目 GUI 的描述檔 :
接著是兩個 Activities 的代碼 :
最後也是該 App 的核心 XML 描述檔 "AndroidManifest.xml" :
Preface :
SQLite 是一個開源的數據庫並在 Android 的 native library 與 application framework 中進行支援. 你可以使用標準的 SQL 語法對 SQLite 進行操作並支援 Prepared statements 與 Transactions. 除此之外, 它還有一個優點也是為什麼它會被手持裝置選擇為內建的數據庫, 就是在 runtime 時它使用的記憶體非常少, 約 250 kbytes.
在 Android 使用 SQLite 並不需要額外安裝或設置. 你只需要透過 SQL 來操作它即可. 透過 Application 提供的幾個有用的類別並可以完成操作, 後面會繼續討論這些類別. 另外在 Android 上使用數據庫操作需要對 I/O 進行操作因而會 slow down 程式的進行, 因此這裡建議使用 AsyncTask 方式來對數據庫進行操作. 相關主題可以參考這裡(Android Background Processing Tutorial for details).
SQLite 支援數據類型如 TEXT (similar to String in Java), INTEGER (similar to long in Java) 與 REAL (similar to double in Java). 所以在插進去數據庫並須做對應的類型轉換. 要注意的是 SQLite 本身並不會進行類型檢查, 因此你可能插入 integer 到 string 的欄位裡.
當你使用 SQLite 建立數據庫表格時, 所有的資料都會被儲存到目錄 "DATA/data/APP_NAME/databases/FILENAME". "DATA" 你可以使用 Environment.getDataDirectory() 來獲取. 而 "APP_NAME" 是你應用程序的名稱, "FILENAME" 則是你數據庫表的名稱. 通常你呼叫 Environment.getDataDirectory() 會返回 SD 卡的位置. 最後 SQLite 數據庫對所有的程序都是 private 也就是說你不能在程序間分享 SQLite 的資料. 但是有替代方案, 就是透過 Content Provider.
SQLiteOpenHelper :
要在 Android 中建立或是更新數據庫, 你可以透過類別 SQLiteOpenHelper. 在這個類別你可以 override 方法 onCreate() 來建立數據庫, 與方法 onUpgrade() 來更新數據庫. 而這兩個方法都會傳入一個類別 SQLiteDatabase.
SQLiteOpenHelper 提供方法 getReadableDatabase() 與 getWriteableDatabase() 來獲取 SQLiteDatabase 物件並進行數據庫 "讀" 與 "寫" 的操作. 而最後在處理 SQLite 數據庫時, 會以 "_id" 當作 primary key 的欄位使用.
SQLiteDatabase and Cursor :
SQLiteDatabase 提供方法 insert(), )]update() ,)]delete() 與 )]execSQL() 來執行 SQL 與操作數據庫. 詳細的操作使用說明, 請見 API.
查詢的建立可以透過方法 rowQuery(). 該方法接受傳入 SQL 語句 或是透過 query() 來提供介面使用動態的資料建立 SQL 語句. 最後是 SQLiteQueryBuilder.SQLiteQueryBuilder 通常使用於 ContentProviders. 而查詢後返回 Cursor 類別來操作結果數據.
類別 Cursor 代表查詢後的結果數據. 如果你要獲得查詢結果的總數可以使用方法 getCount(). 如果要在查詢數據列表中移動, 你可以使用方法 moveToFirst() 或 moveToNext() 並透過方法 isAfterLast() 知道是否已經走尋完畢. 另外你可以透過類別 SimpleCursorAdapter 來使用 ListView 操作查詢數據 Cursor. 關於 ListView 的操作範例, 你可以參考這裡.
Todo application :
接下來我們會建立一個 Android app "Todo" 來示範 SQLite 的使用. 該 App 允許用戶建立 待處理項目, 並用 SQLite 數據庫儲存這些項目. 而這個 App 將會由兩個 Activities 組成. 一個是用來檢視 待處理項目 清單, 另一個則是用來建立 待處理項目. 而這兩個 Activities 溝通則是透過 Intents.
在開始這個 App 之前, 假設你已經有了對 Android App 開發有了一定的基礎. 如果你是新手上路, 你可以閱讀 Android development tutorial 來對 Android App 開發有初步認識. 另外再開始下面的 App 前, 你可能也需要知道 Android Intents 與 Android ListView 是什麼. 而這個 App 執行後的 GUI 示圖如下 :
首先使用 Eclipse 建立專案 "TodosOverview", 並使用 Activity "TodoDetails". 接著我們來撰寫類別處理 database :
Based on this helper class we can write the class "TodoDbAdapter" which will provide the functionality to query, create and update todos. The method open() will open the database via the helper class. For updating and creating values we use the "android.content.ContentValues" class. This class allows to store key/values. You use the column names as the key in ContentValues and pass the object to the insert or update method of your database.
接著我們撰寫 "TodoDbAdapter" 來提供數據庫操作. 使用方法 open() 來建立數據庫, 並透過類別 android.content.ContentValues 來封裝數據庫表格的 key/values pairs. 接著我們使用這個類別儲存數據來對數據庫進行 insert 與 update 我們的數據庫 :
接著我們要往 MVC 的 V 移動, 我們知道 Android 透過 XML 對 GUI 的 Layout 與 上面的元件進行描述. 首先請建立 "listmenu.xml" :
接著我們在 Todo 有分兩種類型 "Reminder" 與 "Urgent", 我們將這兩個字串存在資源檔 "priority.xml" (在 "res/values") 裡 :
接著我們將在 App 有使用的 label 字串或標題存放於資源檔 "strings.xml" :
接著是 "todo_list.xml" 用來描述顯示 todo 清單的 GUI :
接著當我們點擊單一個 todo 項目時, 會有一個 GUI 來表示該項目, 該 GUI 的描述檔 todo_row.xml 如下 :
接著是編輯 todo 項目 GUI 的描述檔 :
接著是兩個 Activities 的代碼 :
最後也是該 App 的核心 XML 描述檔 "AndroidManifest.xml" :
請問可以跟你要檔案嗎?
回覆刪除Hi~ 你可以參考: http://www.vogella.de/articles/AndroidSQLite/article.html#todo
回覆刪除我當初的 Eclipse 專案 已經不在了...Orz
謝謝!!
刪除