我使用以下方法删除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循环就可以正常工作!
答案 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 key
是integer
并已定义为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);