我正在尝试从游标获取列信息,并获得令人沮丧的错误。我想选择包含$ SEARCH的所有列。这是代码:
Bundle b = getIntent().getExtras();
SEARCH = b.getString("searchtext");
Cursor c = mDBHelper.getReadableDatabase().query("table", null, "name="+ SEARCH, null, null, null, null);
由于某种原因,游标抛出了运行时异常。这是错误:
12-30 03:55:00.357: E/AndroidRuntime(1302): Caused by: android.database.sqlite.SQLiteException: near "CAP": syntax error: , while compiling: SELECT * FROM kroger WHERE name=john
不确定为什么会发生这种情况,我的代码中可能存在一个非常简单的错误,但我不确定它是什么。谢谢你的帮助!
答案 0 :(得分:3)
"name="+SEARCH
将成为name=CAP
,这不是有效的SQL表达式。天真的解决方案是将术语包装在单引号中:
"name='" + SEARCH + "'"
但这受到SQL注入攻击。使用参数传递工具以无注入方式传递搜索项:
query("table", null, "name=?", new String[] {SEARCH}, null, null, null);