我有一个sqlite查询:
rawQuery("select * from ? where ?=?", new String[] {
DBTABLE_PROFILE, KEY_PROFILE_ID, Integer.toString(profileID) });
但Android给了我
E/AndroidRuntime(7323): Caused by: android.database.sqlite.SQLiteException:
near "?": syntax error (code 1): , while compiling: select * from ? where ?=?
我测试了哪个?引起了问题,结果证明是第一个问题。如果我将其更改为
"select * from profile where ?=?"
它不是FC。
那么,表名是否可以用'?'代替?
[编辑]:
有一个 解决方法 来实现类似rawQuery的功能,没有任何限制。请参阅下面的答案。
答案 0 :(得分:2)
没有。您应该用?
替换的唯一参数是查询变量,而不是表名而不是列名。
正确的查询是:
rawQuery("select * from " + DBTABLE_PROFILE + " where " + KEY_PROFILE_ID + "=?",
new String[] { Integer.toString(profileID) });
答案 1 :(得分:0)
如果您已经测试过,那么您就得到了答案。
我不确定,但我希望是因为 rawQuery 不在幕后进行字符串连接 - 它将准备一个存储过程或类似的,然后将值转义为程序对象。因此,它需要知道表名来创建过程,因此不能使用替换表名。
答案 2 :(得分:0)
感谢Sam的指点,由于限制的数量,即使使用rawQuery(String,String []),我发现自己也非常愚蠢。
IMO在没有限制的情况下实现类似rawQuery的功能的最佳方法是使用带有String.format()的rawQuery(String)
例如:
rawQuery(String.format("select * from %s where %s=%d",
DBTABLE_PROFILE, KEY_PROFILE_ID, profileID));