请告诉我如何在android sqlite数据库中删除n行。我用了这段代码:
String ALTER_TBL ="delete from " + MYDATABASE_TABLE +
"where"+KEY_ID+"in (select top 3"+ KEY_ID +"from"+ MYDATABASE_TABLE+"order by _id );";
sqLiteDatabase.execSQL(ALTER_TBL);
但它显示错误。
03-21 13:19:39.217: INFO/Database(1616): sqlite returned: error code = 1, msg = near "in": syntax error
03-21 13:19:39.226: ERROR/Database(1616): Failure 1 (near "in": syntax error) on 0x23fed8 when preparing 'delete from detail1where_id in (select top 3_idfromdetail1order by _id );'.
答案 0 :(得分:39)
String ALTER_TBL ="delete from " + MYDATABASE_TABLE +
" where "+KEY_ID+" in (select "+ KEY_ID +" from "+ MYDATABASE_TABLE+" order by _id LIMIT 3);";
"delete from" + TABLE + "where" = "delete frommytablewhere"
此方法使用两个步骤删除前N行。
找到前N行:
SELECT id_column FROM table_name ORDER BY id_column LIMIT 3
结果是一个id列表,代表前N行(此处为3行)。 ORDER BY
部分很重要,因为SQLite不保证没有该子句的任何订单。如果没有ORDER BY
,该语句可以删除3个随机行。
从表中删除与id列表匹配的任何行:
DELETE FROM table_name WHERE id_column IN ( {Result of step 1} )
如果步骤1的结果为空,则不会发生任何事情,如果少于N行,则会删除这些行。
重要的是要注意id_column
必须是唯一的,否则将删除超过预期的行。如果用于排序的列不唯一,则整个语句可以更改为DELETE FROM table_name WHERE unique_column IN (SELECT unique_column FROM table_name ORDER BY sort_column LIMIT 3)
。提示:当在表上删除时,SQLite的ROWID
是unique_column
的一个很好的候选者(在删除视图时可能不起作用 - 这里不确定)。
要删除最后 N行,必须将排序顺序反转为降序(DESC
):
DELETE FROM table_name WHERE unique_column IN (
SELECT unique_column FROM table_name ORDER BY sort_column DESC LIMIT 3
)
要删除N th 到M th 行,LIMIT
子句可以由OFFSET
扩展。下面的示例将跳过前两行并返回/删除下一行3.
SELECT unique_column FROM table_name ORDER BY sort_column LIMIT 3 OFFSET 2
将LIMIT
设置为负值(例如LIMIT -1 OFFSET 2
)将返回除前2行之外的所有行,导致删除除前2行之外的所有行 - 这也可以通过转动{来完成{1}} SELECT .. WHERE .. IN ()
SQLite有option直接在SELECT .. WHERE .. NOT IN ()
语句中启用ORDER BY x LIMIT n
部分而没有子查询。该选项未在Android上启用且无法激活,但在其他系统上使用SQLite的用户可能会对此感兴趣:
DELETE
答案 1 :(得分:2)
答案 2 :(得分:2)
我会这样做:
db.delete(MYDATABASE_TABLE, "KEY_ID > "+ value, null);
答案 3 :(得分:2)
你可以试试这段代码
int id;
public void deleteRow(int id) {
myDataBase.delete(TABLE_NAME, KEY_ID + "=" + id, null);
}
String id;
public void deleteRow(String id) {
myDataBase.delete(TABLE_NAME, KEY_ID + "=\" " + id+"\"", null);
}
答案 4 :(得分:1)
这是一个有点长的程序,但你可以这样做
首先获取表格的ids列,您要从中删除某些值
public Cursor KEY_IDS() {
Cursor mCursor = db.rawQuery("SELECT KEYID " +
" FROM MYDATABASE_TABLE ;", null);
if (mCursor != null)
{
mCursor.moveToFirst();
}
return mCursor;
}
将其收集在数组列表中
ArrayList<String> first = new ArrayList<String>();
cursor1 = db.KEY_IDS();
cursor1.moveToFirst();
startManagingCursor(cursor1);
for (int i = 0; i < cursor1.getCount(); i++) {
reciv1 = cursor1.getString(cursor1
.getColumnIndex(DBManager.Player_Name));
second.add(reciv1);
}
和火灾删除查询
for(int i = 0 ;i<second.size(); i++)
{
db.delete(MYDATABASE_TABLE KEYID +"=" + second.get(i) , null);
}
答案 5 :(得分:1)
删除sqlite数据库中的前N(100)行
Delete from table WHERE id IN
(SELECT id FROM table limit 100)
答案 6 :(得分:0)
您可以使用以下模式:(除了&#34; zapl&#34;提供的响应)。
**DELETE FROM {Table-X} WHERE _ID NOT IN
(SELECT _ID FROM {Table-X} ORDER BY _ID DESC/ASC LIMIT (SELECT {Limit-Column} FROM {SpecificationTable}) );**
其中{Table-X}指的是您要删除的表,_ID是主要的唯一列 DESC / ASC - 根据您是要删除最高记录还是最后记录,最后是在&#34; LIMIT&#34;条款,我们提供&#34; n&#34;因素使用另一个查询,该查询从{SpecificationTable}调用{Limit-Column}:其中包含您要删除它们的值。
希望这有助于某人。
快乐编码。