SQLite中的Where子句在android中不起作用:(

时间:2010-11-24 13:43:36

标签: android sqlite

尝试在SQLite中查询某些数据时,我遇到了一个恼人的错误。

这是我的代码:

Cursor cursor= db.query(TABLE_IMAGES, new String[]{"_id"}, "name" +" = "+compareToThis, null, null, null, null);

我只是将光标作为字符串返回。

错误在于:

  

没有这样的专栏:compareToThis:同时编译.....声明

我的问题是:为什么SQLite将compareToThis属性设置为列时它只是一个值?

我该如何解决这个问题?

提前致谢。

2 个答案:

答案 0 :(得分:7)

Cursor cursor= db.query(TABLE_IMAGES, new String[]{"_id"}, "name" +" = ?", new String[]{compareToThis},  null, null, null);

选择必须包含参数的占位符,下一个参数应该是参数数组。

答案 1 :(得分:1)

弗拉基米尔的解决方案是有效的,但是如果你像我一样,并想知道为什么你的方法最初在它应该有的时候不起作用,这就是为什么: 这是因为除非你使用(单引号或双引号)来表示它是一个字符串,否则它需要一个整数。

例如,在MySql中,这将不会返回任何结果:

SELECT * FROM clients WHERE firstName = Bob; -- This will not work.

但是当你用引号括起来时,它会返回一个结果,因为它将Bob标识为字符串文字。

Select * FROM clients WHERE firstName = 'Bob'; -- Single quotes work.
Select * FROM clients WHERE firstName = "Bob"; -- Double quotes as well.

因此,要使其工作,您必须使用单引号包围compareToString,正如Muhhammad在评论中提到的那样。

Cursor cursor= db.query(TABLE_IMAGES, new String[]{"_id"}, "name" +'" = "+compareToThis+"'", null, null, null, null);