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。

你可能感兴趣的:(Android,开发)