尝试在SQLite中查询某些数据时,我遇到了一个恼人的错误。
这是我的代码:
Cursor cursor= db.query(TABLE_IMAGES, new String[]{"_id"}, "name" +" = "+compareToThis, null, null, null, null);
我只是将光标作为字符串返回。
错误在于:
没有这样的专栏:compareToThis:同时编译.....声明
我的问题是:为什么SQLite将compareToThis属性设置为列时它只是一个值?
我该如何解决这个问题?
提前致谢。
答案 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);