插入数据
要把数据插入到提供器中,就要调用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()方法时,也应该过滤用户输入,以防止恶意输入。
插入数据
要把数据插入到提供器中,就要调用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()方法时,也应该过滤用户输入,以防止恶意输入。