android的四大組件之一的contentprovider用來共用資料,很多應用的provider會繼承它,例如MediaProvider。
在android中操作資料庫要用到幾個類:SQLiteDatabase、SQLiteOpenHelper。SQLitedatabase是一個資料庫類,執行個體化產生資料庫物件。使用時經常要用到助手類SQLiteOpenHelper。但SQLiteOpenHelper是抽象類別,使用時需要繼承然後執行個體化,一般會用DatabaseHelper繼承SQLiteOpenHelper,override父類的回呼函數。
SQLiteOpenHelper是用於建立資料庫和管理版本的助手類,中有抽象方法onCreate()、onUpdate,加上onOpen,三個為回呼函數,在某些時候會自動調用,需要子類override。例如建立時會調用onCreate。通過調用getReadableDatabase() 、getWriteableDatabase() 得到一個SQLitedatabase,進而對資料庫進行增刪改查。
SQLiteDatabase,管理資料庫的外部方法的類。主要有建立、刪除、執行SQL指令等方法,如close()關閉資料庫,delete刪除資料庫的一行,execSQL執行SL指令,insert插入一行。。。
DatabaseHelper類,建構函式很重要。
建立一個資料庫:new Databases()。此時並沒有調用onCreate,而直到getReadableDatabase()後才返回一個SQLiteDatabase對象,即調用了onCreate。建立了的資料庫物件放在/data/data/下,用命令sqlite3 database_name進入操作資料庫模式,可以輸入資料庫語句進行操作。
當發現建構函式中版本資訊發生變化時,自動調用onUpgrade進行升級。
對資料庫進行寫操作時,經常用到contentValue,
更新資料庫就相當於執行update語句。database_name.update(table_name,contentValue_object,where)
查詢query。要用到遊標cursor。在使用cursor時,第一是不斷地往下移動遊標cursor.moveToNext(),第二是判斷下一個記錄是否為空白(if (cursor == null))。要去某一個記錄中某一列的資料,需要兩步,cursor.getString(index), 而index通過getColumnIndex()獲得。
小結:資料庫是自己的弱項,在做多媒體時,總會遇到這樣那樣的資料庫、MediaProvider問題,所以要好好重視一下。
在csdn貼子上又看到了這麼一段挺精鍊的解釋:
什麼是SQLiteDatabase?
一個SQLiteDatabase的執行個體代表了一個SQLite的資料庫,通過SQLiteDatabase執行個體的一些方法,我們可以執行SQL語句,對資料庫進行增、刪、查、改的操作。需要注意的是,資料庫對於一個應用來說是私人的,並且在一個應用當中,資料庫的名字也是惟一的。
Content Provider:
一般是通過ContentResolver。你可以通過getContentResolver()從一個活動或其它應用程式組件的實現裡擷取一個ContentResolver:
查詢一個內容提供器Querying a Content Provider
你需要三方面的資訊來查詢一個內容提供器:
•用來標識內容提供器的URI
•你想擷取的資料欄位的名字
•這些欄位的資料類型
產生查詢Making the query
你可以使用ContentResolver.query()方法或者Activity.managedQuery()方法來查詢一個內容提供器。兩種方法使用相同的參數序列,而且都返回一個Cursor對象
批次更新記錄Batch updating records
要批次更新一組記錄(例如,把所有欄位中的"NY"改為"New York"),可以傳以需要改變的列和值參數來調用ContentResolver.update()方法。
刪除一個記錄Deleting a record
要刪除單個記錄,可以傳以一個特定行的URI參數來調用ContentResolver.delete()方法。
建立一個內容提供器Creating a Content Provider
要建立一個內容提供器,你必須:
•建立一個儲存資料的系統。大多數內容提供器使用Android的檔案儲存方法或SQLite資料庫來存放它們的資料,但是你可以用任何你想要的方式來存放資料。Android提供SQLiteOpenHelper類來協助你建立一個資料庫以及SQLiteDatabase類來管理它。
•擴充ContentProvider類來提供資料提供者。