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

时间:2013-11-01 12:27:49

标签: android

有人告诉我:
在以下代码中,参数“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。 我认为代码会导致错误,我认为新的String [] {“6”,“4”}必须匹配两个变量,对吧?

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

我不能使用db.delete(...)来实现相同的功能,就像从test.db中删除一样,其中id为('6','4') !对吧?

How can pass two parameters to rawQuery in android?
How can I create a code if I need to delete some record using In parameter in android?

3 个答案:

答案 0 :(得分:2)

  

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

简答:是的。这段代码不起作用。

说明:

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

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

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

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

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

  

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

上面解释。针对您的案例的正确解决方案是:

  • 将第二个参数添加到WHERE子句
  • 从string-array中删除第二项

它看起来像:

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中的相同:查询中的第一个参数将替换为数组中的第一个项目等。

答案 1 :(得分:1)

使用此例如。 db.execSQL(“从表名中删除id IN(1,2)”); 祝你好运!

答案 2 :(得分:0)

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

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

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

PS:我写这篇文章只是为了给你指路。