当前位置:操作系统 > 安卓/Android >>

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 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,