删除前8行形成一个SQlite数据库

问题描述 投票:0回答:1

我以此删除SQlite表中的行:

public void deleteFirstRow()
{
    SQLiteDatabase db = this.getWritableDatabase();

    Cursor cursor = db.query("eventosUTN", null, null, null, null, null, null);

    if(cursor.moveToFirst()) {
        String rowId = cursor.getString(cursor.getColumnIndex("id"));
        db.delete("eventosUTN", "id" + "=?",  new String[]{rowId});
    }
    db.close();
}

当数据库的大小大于8行时,我需要删除firts 8行,因此:

public void checkRowsSize(Events events, Context contex)
{  
    new Thread(new Runnable() { 
        public void run() {
        if(events.getRowCount()>8){
            while(events.getRowCount()>8){
                events.deleteFirstRow(contex);
            }
        }
    }
}).start();
}

Events的getRowCount方法是:

public int getRowCount(){
    String query = "Select*FROM eventsUTN";
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(query, null);
    return cursor.getCount();
} 

但是当我在checkRowSize中设置while循环时,它将删除所有数据库。为什么这个?但是如果我设置:

public void checkRowsSize(Events events, Context contex)
{  
    new Thread(new Runnable() { 
        public void run() {
        if(events.getRowCount()>8){
            events.deleteFirstRow(contex);
        }
    }
}).start();
}

每次创建活动时,它仅删除第一行,直到数据库的大小小于8行。所以绕开while循环就可以了!

android sqlite
1个回答
0
投票

您可以如果表的大小大于8行,则删除前8行使用此语句:

delete from eventosUTN
where 
  (select count(*) from eventosUTN) > 8
  and 
  id in (select id from eventosUTN limit 8)

其中id是表格的primary key。但是您应该知道,表中的前8行并不总是您所得到的。表行是无序的。因此,也许您应该使用ORDER BY子句来定义此顺序的逻辑,例如:

delete from eventosUTN
where 
  (select count(*) from eventosUTN) > 8
  and 
  id in (select id from eventosUTN order by id limit 8)

所以您可以在Java代码中执行以下操作:

String where = "(select count(*) from eventosUTN) > 8 and id in (select id from eventosUTN order by id limit 8)";
db.delete("eventosUTN", where, null);

如果表的primary keyinteger并已定义为AITOINCREMENT,这意味着它一直在增加并且从不重用,那么您也可以使用以下语句:

delete from tablename 
where id < (select id from tablename order by id limit 8, 1)

和Java代码:

String where = "id < (select id from tablename order by id limit 8, 1)";
db.delete("eventosUTN", where, null);
© www.soinside.com 2019 - 2024. All rights reserved.