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