1

我的 ListView 显示来自我的 SQLITE 数据库的数据。通过 Longclick 一个 ListViewItem 我删除了这个特定的项目。EveryThing 工作正常,但我没有删除我的第一个项目。我在 LogCat 或其他东西中没有收到任何错误。只是什么都没有发生。

这是我的数据库类代码:

public void deleteEntry(String TABLE, int pos) {
    SQLiteDatabase database = this.getWritableDatabase();
    database.delete(TABLE, KEY_ROWID + "=?" , new String[] { String.valueOf(pos)});

    // also tryed this code
    database.delete(TABLE, KEY_ROWID + "= '" + pos +"'",null);
}

这是我的ListView 活动的代码:

// Deletes the given row
            database.deleteEntry(MyDatabase.DATABASE_TABLE_ORDERS, position);
            updateList();

我很确定提交的int pos代表相应 Databse 条目的 rowId(第一个条目pos为 0,第二个pos为 1,依此类推)

updateList()创建一个新的列表视图并再次从数据库中加载所有数据

有没有人知道为什么除了我的第一个条目之外,我可以删除我的数据库中的 ListView / 行中的所有项目?谢谢你的帮助!

4

2 回答 2

1

在阅读了你的问题几次后,我认为我最初在评论中提出的是问题......

在我看来,您正在使用该int pos参数并认为它是数据库中的行 ID,但事实并非如此。该int pos参数是列表中的位置(根据您的排序等,它可能与行 ID 不同)。

行 id 包含在long id侦听器的参数中。以下更改应该可以帮助您(假设我的猜测是正确的)。

@Override
public void onListItemClick(ListView l, View v, int pos, long id) {
       database.deleteEntry(MyDatabase.DATABASE_TABLE_ORDERS, id);  
       updateList();  
}

public void deleteEntry(String TABLE, long id) {   
    SQLiteDatabase database = this.getWritableDatabase();   
    database.delete(TABLE, KEY_ROWID + "=?" , new String[] { String.valueOf(id)});   

    // or this could be used
    database.delete(TABLE, KEY_ROWID + "= " + id ,null);   
}   
于 2012-09-25T14:01:03.190 回答
0

database.execSQL("DELETE FROM " + TABLE + " ORDER BY " + column_to_order_by + " ASC LIMIT(0,1);"):

我肯定会先在测试台上测试这个!

于 2012-09-25T13:38:10.783 回答