我想删除例如color1为蓝色的前3个(最旧的)。
示例数据集:
_id | name | surname | color1 | color2
1 | mark | jacobs | blue | green
2 | tony | hilo | black | red
13 | lisa | xyz | blue | green
4 | andre | qwerty | blue | green
9 | laura | abc | black | red
14 | kerr | jacobs | blue | green
我想使用execsql而不是db.delete .. 哪种方法更可取? 我的代码应该是什么样的?
我将在Android应用程序中使用此内部eclipse。
答案 0 :(得分:2)
db.execSQL("DELETE FROM MyTable WHERE _id IN " +
"(SELECT _id FROM MyTable WHERE color1 = ? ORDER BY _id LIMIT 3)",
new Object[] { "blue" });
使用 execSQL
非常好,特别是当命令太复杂以至于使用delete
需要更复杂的代码时。
答案 1 :(得分:1)
不建议对此操作或任何操作SELECT / INSERT / UPDATE / DELETE使用execSql,因为execSql不会返回任何内容,例如受此查询影响的错误或行。
相反,虽然写出来需要更长的时间
Cursor c = db.query(table, new String[]{"_id"}, "color1" +"=?", new String[]{"blue"}, null,null,"_id ASC","3");
String ids="";
String qs = "";
for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
ids+=c.getInt(c.getColumnIndex("_id")+",";
qs+="?,"
}
ids= ids!=""?ids.substring(0, ids.length() - 1):ids;
qs= qs!=""?ids.substring(0, qs.length() - 1):qs;
db.delete(table, "_id IN ("+qs+")", ids.split(","));
这是execsql为什么不适合这种情况的参考 http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#execSQL(java.lang.String,java.lang.Object [])
答案 2 :(得分:0)
DELETE FROM table WHERE _id IN
(SELECT _id FROM table ORDER BY _id ASC LIMIT 3);