2

有人告诉我:
在下面的代码中,参数“2”用于var numberType,参数“5”用于var id

Cursor cursor = db.rawQuery("SELECT * FROM mytable where numberType=? and id=?", new String[] { "2","5" });

在下面的代码中,参数“6”和参数“4”都用于var id。我认为代码会导致错误,我认为 new String[]{"6","4"} 必须匹配两个变量,对吧?

db.delete("person", "id"+"=?", new String[]{"6","4"});

我不能使用 db.delete (...)来实现相同的功能,就像delete from test.db where id in ('6','4')! 正确的 ?

如何在android中将两个参数传递给rawQuery?
如果我需要在 android 中使用 In 参数删除一些记录,我该如何创建代码?

4

3 回答 3

2

我认为代码会导致错误,我认为 new String[]{"6","4"} 必须匹配两个变量,对吧?

简短的回答:是的。这段代码行不通。

解释:

您想绑定两个参数 - 换句话说,您想?用 bindArgs 1替换两个占位符(在您的情况下为 6 和 4)。

语句中的参数数量必须与绑定到语句的参数数量相匹配 - 因此,如果查询中有三个参数(否则将引发异常):

select * from Users where id = ? and age = ?

您必须使用相同数量的参数(项目)创建whereArgs字符串数组:

String[] whereArgs = {"20345", "18"};

SQLiteDatabase如何区分android中一个var或两个var的参数?

解释如上。您的情况的正确解决方案是:

  • 将第二个参数添加到WHERE子句
  • 从字符串数组中删除第二项

它看起来像:

db.delete("person", "id = ? and pin = ?", new String[] {"6", "4"});
db.delete("person", "id = ?", new String[] {"6"});
db.delete("person", "id in(?, ?)", new String[] {"6", "4"});


1替换与经典 Java 相同:查询中的第一个参数将替换为数组中的第一项等。

于 2013-11-01T13:02:04.470 回答
1

使用这个例如。db.execSQL("DELETE from tablename where id IN (1,2)"); 祝你好运!

于 2013-11-05T04:20:29.453 回答
0

您可以从同一个表中删除,如下所示。

DELETE FROM mytable WHERE id IN (
    SELECT pid FROM (
        SELECT person.id AS pid FROM person) AS ptable
    )

现在,您可以根据需要更改嵌套查询。

PS:我写这个只是为了给你一个方向。

于 2013-11-05T01:41:02.710 回答