假设我有这样的方法......
long getNumItemsFromDb() {
SQLiteDatabase db = dbhelper.getReadableDatabase();
try {
String query = "SELECT " + COL_NAME +
" FROM " + TABLE_NAME +
" WHERE " + COL_NAME + " = ?";
String[] args = new String[] {"whatever"};
return DatabaseUtils.longForQuery(db, query, args);
} finally {
db.close();
}
}
...但是,例如,String COL_NAME = "select";
和String TABLE_NAME = "from";
可能会破坏查询。所以,我显然需要在我的query
字符串中用反引号,单引号或双引号括起这些值 - 但这些是Android / SQLite的最佳做法?
注意 - 我已经简化了上面的查询字符串,使这个问题更简单,更重要。所以,实际上,我确实需要像这样手动创建SQL,而不是使用Android中的一种辅助方法。
答案 0 :(得分:3)
我说按照标准去做。
ANSI标准是引用字段/标识符的双引号,以及that works well on SQLite。
请注意其他一些RDBMS的may need some help to follow the standard,但遵循它将允许您的SQL在尽可能多的RDBMS /平台上保持不变。
答案 1 :(得分:0)
如果您要使用机器人类SQLitedatabase
,只需使用query
方法,如果您的选择字符串包含任何标识符,请不要担心。
虽然在使用带有MATCH标识符的FTS表时,我注意到您必须使用百分号这样包围可搜索字符串:"%"+str+"%"
,否则它只匹配一个空格。