ContentProvider 的 delete 可删除数据,并且该方法返回当前删除数据的记录个数。
sdk api 描述
但是,看完下面的内容,你就会发现,情况不是表面上那样的!
现有数据库表内容如下
1. 在 android2.3.3 的模拟器上面
通过下面语句删除 _id=1 的记录
final int delRows = getContentResolver().delete( UserTableData.CONTENT_URI, "_id=1", null); Log.d("mark", "delete data and delRows = " + delRows);
如果删除数据库中表的所有数据,可以这样
@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 的真机上面
把同样的程序运行在真机上,删除某条记录,返回结果都是:
而删除所有数据,返回结果却是
与实际情况不符合。
当初还以为,删除失败,但是打开数据库看看,里面的确是没有数据了?!
估计是 android 版本问题。
3. 解决问题
通过 ContentProvider 来删除数据,其实是调用 SQLiteDatabase 的 delete 方法
android sdk api 中 SQLiteDatabase 的 delete 方法
仔细研究一下,发现 To remove all rows and get a count pass "1" as the whereClause.
于是代码修改
final int delRows = getContentResolver().delete( UserTableData.CONTENT_URI, "1", null); Log.d("mark", "delete data and delRows = " + delRows);
再次,测试代码,真机和模拟器都返回了正确的结果!
问题解决!