Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从SQLite数据库中删除多行时出现问题_Android_Database_Sqlite - Fatal编程技术网

Android 从SQLite数据库中删除多行时出现问题

Android 从SQLite数据库中删除多行时出现问题,android,database,sqlite,Android,Database,Sqlite,早上好,我在尝试同时从数据库中删除几行时遇到一些问题。当我调试应用程序时,会抛出一个异常(CursorIndexOutOfBoundsException),我不知道如何解决这个问题。提前谢谢 btnDel.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { DBAdapter db = new DBAdapter(getBaseContext());

早上好,我在尝试同时从数据库中删除几行时遇到一些问题。当我调试应用程序时,会抛出一个异常(CursorIndexOutOfBoundsException),我不知道如何解决这个问题。提前谢谢

    btnDel.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
        DBAdapter db = new DBAdapter(getBaseContext());

        db.open();
        Cursor c = db.getAllContacts();
        int rowId = c.getInt(0);
        while(c.getCount() > 50)
        {
            db.deleteContact(rowId);
                    Toast.makeText(getBaseContext(), "Deleted", Toast.LENGTH_SHORT).show();
        }    
        db.close();  
        }
    });

我相信您想删除ID值大于50的记录

DBAdapter db = new DBAdapter(getBaseContext());
db.open();
Cursor c = db.getAllContacts();

while(c.moveToNext())
{
    int rowId = c.getInt(0);
    if(rowId > 50){
        db.deleteContact(rowId);
        Toast.makeText(getBaseContext(), "Deleted", Toast.LENGTH_SHORT).show();
    }
}
c.close();
db.close();  

实际上,您必须以分隔字符串的形式传递数据,然后使用(]多个id]编写删除查询

例如


你的主要问题是:

    int rowId = c.getInt(0);
    while(c.getCount() > 50)
    {
        db.deleteContact(rowId);
我不认为游标知道它的一行在打开时被删除了。因此,游标不会自动神奇地从其“缓存”中删除已删除的行,这意味着通过已删除的游标访问行时会出现问题

我建议使用带有适当where子句的单个delete语句,这也有助于提高性能


可能是这样的:找到要保留的第一行(最小rowId),它位于最后一行之前50行。然后您可以执行
deletfrom。。。其中_id
。看一看,;然后您可以使用
cursor.moveToPosition(cursor.getCount()-50)
查找您感兴趣的行。

实际上,我正试图将行数限制为50,删除旧条目(id较低的行),但这已经帮了我很大的忙,谢谢
    int rowId = c.getInt(0);
    while(c.getCount() > 50)
    {
        db.deleteContact(rowId);