1、內容提供器
-
-
能夠精確的進行控制,哪些數據能夠共享,哪些數據不能夠共享
-
內容提供器有兩種用法:(1)使用現有的內容提供器來讀取和操做相應程序中的數據;(2)建立本身的內容提供器給咱們的程序的數據提供外部訪問接口
2、ContentResolver的基本用法
-
獲取ContentResolver實例的方法: new Context().getContentResolver()
-
該實例提供了一系列方法insert(),update(),delete(),query()用於CRUD操做
-
這些成員方法在參數上與SQLiteDatabase實例有一些不一樣
-
-
-
權限用於不一樣的程序來進行區分的,都採用程序包命名的方式,好比某個程序包爲
com.example.app
那麼該程序對應的權限能夠命名爲
com.example.app.provide
-
路徑則是用於對同一個應用程序中的不一樣的表進行區分的,一般會添加到權限後面,好比一個程序中含有兩個表table1和table2,那麼能夠將路徑分別命名爲/table1和/table2。而後進行兩者組合,內容Url變成了
com.example.app.provider/table1
和
com.example.app.provider/table2
-
還須要在頭部加上協議
content://com.example.app.provider/table1
-
對於這個字符串咱們須要解析爲Uri對象才能做爲參數傳入
Uri uri = Uri.parse("content://com.example.app.provider/table1");
Cursor cursor = getContentResolver().query(uri,projection,selection,selectionArgs,sortOrder);
query()方法參數 |
對應SQL部分 |
描述 |
uri |
from table_name |
指定查詢某個應用程序下的某一張表 |
projection |
select colum1,column2 |
指定查詢的列名 |
selection |
where column = value |
指定where的約束條件 |
selectionArgs |
|
爲where中的佔位符提供具體的值 |
orderBy |
order by column1,column2 |
指定查詢結果的排序方式 |
-
查詢後返回一個Cursor對象,接下來的咱們將數據從Cursor對象中逐個讀取出來,讀取的思路仍然是經過移動遊標的位置來進行遍歷Cursor的全部行,而後在取出每一行中相應列的數據
if(cursor != null ){
while(cursor.moveToNext(){
String column1 = cursor.getString(cursor.getColumnIndex("column1"));
int column2 = cursor.getInt(cursor.getColumnIndex("column2"));
}
cursor.close();
}
ContentValues values = new ContentValues();
values.put("column1","text");
values.put("column2","text");
getContentResolver().insert(uri,values);
ContentValues values = new ContentValues();
values.put("column1","");
getContentResolver().update(uri,values,"column1 = ? and column2 = ?",new String[] {"text","1"});
getContentResolver().delete(uri,"column2 = ?",new String[]{"1"});
3、源碼:
-
-
-
歡迎關注微信公衆號:傅里葉變換,我的帳號,僅用於技術交流