Sqlite 大数据量删除问题

不知道大家有没有尝试过在Sqlite数据库中一次性删除上千条数据。你会发现删除函数返回后,但是数据并未删除。这是怎么回事喃?正是Sqlite这个轻量级数据库本身的缺陷,无法高速处理大数据量操作。不信引用一段Android源码你们看看Google是如何写Sqlite删除语句的。
do
        {
            currentnumber++;
            id = idCursor.getInt(0);
             if(iBatchDeleted>1 && !idCursor.isLast())
             {
                 if (sWhere.length() == 0)
                 {
                 sWhere.append(Contacts._ID + " IN (" + id);
                 } else
                 {
                     sWhere.append(", " + id);
                 }
                 iBatchDeleted--;
            } else
            {
                if (sWhere.length() == 0)
                {
                    sWhere.append(Contacts._ID + "=" + id);

                } else
                {
                sWhere.append(", " + id + ")");
                }

                ops.clear();
                ops.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI)
                .withSelection(sWhere.toString(),null)
                .build());
                try {
                    cr.applyBatch(ContactsContract.AUTHORITY, ops);
                } catch (RemoteException e) {
                    e.printStackTrace();
                    Log.e(tag,"deleteContact: catch exception!");
                    return false;
                } catch (OperationApplicationException e) {
                    e.printStackTrace();
                    Log.e(tag,"deleteContact: catch exception!");
                    return false;
                }               
                iBatchDeleted = 100;
                sWhere.delete(0, sWhere.length());
                try
                {
                    if(!idCursor.isLast())
                    {     
                        Thread.sleep(50);
                    }else {
                        Thread.sleep(100);
                    }
                }                      
                catch (InterruptedException e) {
                }
            }
看出来没有,两个sleep。采用的是循环删除,每次只处理100条记录,每次删除操作间需要休息100ms。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bluebelfast

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值