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

SQLite中的Where子句在android中不起作用:(,android,sqlite,Android,Sqlite,我在尝试查询SQLite中的一些数据时遇到了一个恼人的错误 这是我的密码: Cursor cursor= db.query(TABLE_IMAGES, new String[]{"_id"}, "name" +" = "+compareToThis, null, null, null, null); 我只是将光标作为字符串返回 错误是: 没有这样的列:compareThis:在编译…语句时 我的问题是:为什么SQLite将compareToThis属性设置为列,而它只是一个值 我怎样才能解决这

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

这是我的密码:

Cursor cursor= db.query(TABLE_IMAGES, new String[]{"_id"}, "name" +" = "+compareToThis, null, null, null, null);
我只是将光标作为字符串返回

错误是:

没有这样的列:compareThis:在编译…语句时

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

我怎样才能解决这个问题

提前谢谢

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

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

Vladimir的解决方案是有效的,但是,如果你像我一样,想知道为什么你的方法最初不起作用,而它应该起作用,下面是原因: 这是因为它需要一个整数,除非使用(单引号或双引号)表示它是字符串

例如,在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);

我看不出这个
名称“+”=“+compareThis”有什么问题
我想你需要把你的compareThis字符串用
单引号括起来