ContentProvider: delete 返回值

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);

再次,测试代码,真机和模拟器都返回了正确的结果!


问题解决!







你可能感兴趣的:(Android,技术笔记)