ContentProvider: delete 返回值
ContentProvider 的 delete 可删除数据,并且该方法返回当前删除数据的记录个数。
sdk api 描述
但是,看完下面的内容,你就会发现,情况不是表面上那样的!
现有数据库表内容如下
1. 在 android2.1 的模拟器上面
通过下面语句删除 _id=1 的记录
[java]
final int delRows = getContentResolver().delete(
UserTableData.CONTENT_URI, "_id=1", null);
Log.d("mark", "delete data and delRows = " + delRows);
返回值信息
如果删除数据库中表的所有数据,可以这样
[java]
@Override
public void onClick(View v) {
final int delRows = getContentResolver().delete(
UserTableData.CONTENT_URI, null, null);
Log.d("mark", "delete data and delRows = " + delRows);
}
返回值信息
两者返回的信息,都是正确的!
2. 在 android2.1 的真机上面
把同样的程序运行在真机上,删除某条记录,返回结果都是:
而删除所有数据,返回结果却是
与实际情况不符合。
当初还以为,删除失败,但是打开数据库看看,里面的确是没有数据了?!
奇怪的、诡异的现象,为什么?
3. 解决问题
通过 ContentProvider 来删除数据,其实是调用 SQLiteDatabase 的 delete 方法
android sdk api 中 SQLiteDatabase 的 delete 方法
仔细研究一下,发现 To remove all rows and get a count pass "1" as the whereClause.
于是代码修改
[html]
final int delRows = getContentResolver().delete(
UserTableData.CONTENT_URI, "1", null);
Log.d("mark", "delete data and delRows = " + delRows);
再次,测试代码,真机和模拟器都返回了正确的结果!
问题解决!
补充:移动开发 , Android ,