从SQLite数据库中删除前8行

时间:2020-04-05 12:54:25

标签: android sqlite android-sqlite

我使用以下方法删除SQLite表中的行:

<div class="galleryowl owl-carousel owl-theme owl-loaded owl-drag">
    <div class="owl-stage-outer">
        <div class="owl-stage"
            style="transform: translate3d(-615px, 0px, 0px); transition: all 0.25s ease 0s; width: 2255px;">
            <div class="owl-item" style="width: auto; margin-right: 10px;"><img class="img-responsive"
                    src="https://66822b0c4798708fd342-4c20877d1724d8eec18944c33f4c4dbd.ssl.cf1.rackcdn.com/17727/1386208/medium/17966999.jpg"
                    style="opacity: 1;"></div>
            <div class="owl-item" style="width: auto; margin-right: 10px;"><img class="img-responsive"
                    src="https://66822b0c4798708fd342-4c20877d1724d8eec18944c33f4c4dbd.ssl.cf1.rackcdn.com/17727/1386208/medium/17967002.jpg"
                    style="opacity: 1;"></div>
            <div class="owl-item" style="width: auto; margin-right: 10px;"><img class="img-responsive"
                    src="https://66822b0c4798708fd342-4c20877d1724d8eec18944c33f4c4dbd.ssl.cf1.rackcdn.com/17727/1386208/medium/17966992.jpg"
                    style="opacity: 1;"></div>
            <div class="owl-item active" style="width: auto; margin-right: 10px;"><img class="img-responsive"
                    src="https://66822b0c4798708fd342-4c20877d1724d8eec18944c33f4c4dbd.ssl.cf1.rackcdn.com/17727/1386208/medium/17966994.jpg"
                    style="opacity: 1;"></div>
            <div class="owl-item active" style="width: auto; margin-right: 10px;"><img class="img-responsive"
                    src="https://66822b0c4798708fd342-4c20877d1724d8eec18944c33f4c4dbd.ssl.cf1.rackcdn.com/17727/1386208/medium/17966997.jpg"
                    style="opacity: 1;"></div>
            <div class="owl-item active" style="width: auto; margin-right: 10px;"><img class="img-responsive"
                    src="https://66822b0c4798708fd342-4c20877d1724d8eec18944c33f4c4dbd.ssl.cf1.rackcdn.com/17727/1386208/medium/17966995.jpg"
                    style="opacity: 1;"></div>
            <div class="owl-item active" style="width: auto; margin-right: 10px;"><img class="img-responsive"
                    src="https://66822b0c4798708fd342-4c20877d1724d8eec18944c33f4c4dbd.ssl.cf1.rackcdn.com/17727/1386208/medium/17967011.jpg"
                    style="opacity: 1;"></div>
            <div class="owl-item" style="width: auto; margin-right: 10px;"><img class="img-responsive"
                    src="https://66822b0c4798708fd342-4c20877d1724d8eec18944c33f4c4dbd.ssl.cf1.rackcdn.com/17727/1386208/medium/17966998.jpg"
                    style="opacity: 1;"></div>
            <div class="owl-item" style="width: auto; margin-right: 10px;"><img class="img-responsive"
                    src="https://66822b0c4798708fd342-4c20877d1724d8eec18944c33f4c4dbd.ssl.cf1.rackcdn.com/17727/1386208/medium/17966990.jpg"
                    style="opacity: 1;"></div>
            <div class="owl-item" style="width: auto; margin-right: 10px;"><img class="img-responsive"
                    src="https://66822b0c4798708fd342-4c20877d1724d8eec18944c33f4c4dbd.ssl.cf1.rackcdn.com/17727/1386208/medium/17966984.jpg"
                    style="opacity: 1;"></div>
            <div class="owl-item" style="width: auto; margin-right: 10px;"><img class="img-responsive"
                    src="https://66822b0c4798708fd342-4c20877d1724d8eec18944c33f4c4dbd.ssl.cf1.rackcdn.com/17727/1386208/medium/17966991.jpg"
                    style="opacity: 1;"></div>
        </div>
    </div>
    <div class="owl-nav disabled"><button type="button" role="presentation" class="owl-prev"><span
                aria-label="Previous">‹</span></button><button type="button" role="presentation" class="owl-next"><span
                aria-label="Next">›</span></button></div>
    <div class="owl-dots disabled"></div>
</div>

当数据库的大小大于8行时,我需要删除前8行,所以:

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();
}

Events的getRowCount方法是:

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();
}

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

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

每次创建活动时,它仅删除第一行,直到数据库的大小小于8行。因此,没有while循环就可以正常工作!

1 个答案:

答案 0 :(得分:1)

当表的大小大于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并已定义为AUTOINCREMENT,这意味着它一直在增加并且从未被重用,那么您也可以使用以下语句:

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

并使用Java代码:

String where = "id < (select id from eventosUTN order by id limit 8, 1)";
db.delete("eventosUTN", where, null);
相关问题