插入数据
要把数据插入到提供器中,就要调用ContentResolver.insert()方法。这个方法把一个新行插入到提供器中,并且返回这行的内容的URI。以下代码片段显示了怎样把一行新的数据插入到用户字典提供器:
// Defines a new Uri object that receives the result of the insertion
Uri mNewUri;
...
// Defines an object to contain the new values to insert
ContentValues mNewValues = new ContentValues();
/*
* Sets the values of each column and inserts the word. The arguments to the "put"
* method are "column name" and "value"
*/
mNewValues.put(UserDictionary.Words.APP_ID, "example.user");
mNewValues.put(UserDictionary.Words.LOCALE, "en_US");
mNewValues.put(UserDictionary.Words.WORD, "insert");
mNewValues.put(UserDictionary.Words.FREQUENCY, "100");
mNewUri = getContentResolver().insert(
UserDictionary.Word.CONTENT_URI, // the user dictionary content URI
mNewValues // the values to insert
);
把一行新的数据放到一个单独的ContentValues对象中,它跟一行游标的格式类似。这个对象中的这些列不需要有相同的数据类型,并且如果你不想指定一个值,你能够使用ContentValues.putNull()方法给这列设置为null。
这个代码片段没有添加_ID列,因为这列是自动维护的。提供器会给添加的每一行分配一个唯一的_ID值。提供器通常使用这个值来作为表的主键。
在newUri中使用以下格式返回的内容URI标识了这个新追加的行:
content://user_dictionary/words/<id_value>
<id_value>是这个新行的_ID的值。大多数提供器都能自动的识别内容URI的这种格式,然后在这个特定行上执行申请操作。
调用ContentUris.parseId()方法,能够从返回的Uri中获得_ID值。
更新数据
要更新一行数据,就要像插入数据那样使用带有更新值的ContentValues对象,并且要像查询数据那样指定选择条件。然后使用ContentResolver.update()客户端方法。你仅需要给ContentValues对象添加需要更新列的值,如果要清除一列的值,把这个值设置为null即可。
下列代码片段把local列中所有语言为“en”的行改变为null。返回值是更新的行数。
// Defines an object to contain the updated values
ContentValues mUpdateValues = new ContentValues();
// Defines selection criteria for the rows you want to update
String mSelectionClause = UserDictionary.Words.LOCALE + "LIKE ?";
String[] mSelectionArgs = {"en_%"};
// Defines a variable to contain the number of updated rows
int mRowsUpdated = 0;
...
/*
* Sets the updated value and updates the selected words.
*/
mUpdateValues.putNull(UserDictionary.Words.LOCALE);
mRowsUpdated = getContentResolver().update(
UserDictionary.Words.CONTENT_URI, // the user dictionary content URI
mUpdateValues // the columns to update
mSelectionClause // the column to select on
mSelectionArgs // the value to compare to
);
在调用ContentResolver.update()方法时你也要过滤用户的输入,防治恶意输入。
删除数据
删除行跟获取行数据类似,你要指定想要删除的行的条件,客户端方法会返回被删除的行数。以下代码片段删除了appid列中与“user”匹配的行,并返回了被删除的行数。
// Defines selection criteria for the rows you want to delete
String mSelectionClause = UserDictionary.Words.APP_ID + " LIKE ?";
String[] mSelectionArgs = {"user"};
// Defines a variable to contain the number of rows deleted
int mRowsDeleted = 0;
...
// Deletes the words that match the selection criteria
mRowsDeleted = getContentResolver().delete(
UserDictionary.Words.CONTENT_URI, // the user dictionary content URI
mSelectionClause // the column to select on
mSelectionArgs // the value to compare to
);
在调用ContentResolver.delete()方法时,也应该过滤用户输入,以防止恶意输入。