2

我是 SQLite 和 Android 的新手,所以也许我遗漏了一些明显的东西。

有谁知道将包含空格的参数传递给非平凡的 SQLite 数据库查询的方法,形式为“AAA BBB”

我已经尝试了所有显而易见的事情,例如在参数将被替换为选择字符串的位置周围放置单引号。

实际上尝试将“AAA BBB”硬编码到选择字符串中,但它仍然不起作用。好吧,它确实在简单的原始查询级别上工作,而不是作为更复杂查询的一部分。

我的意思是似乎没有一种方法可以将我想做的查询作为普通的 SELECT 原始查询进行。我已经尝试将子查询提供给原始查询,并且除了参数有空格之外,它可以完成我想要它做的所有事情。用作原始查询的相同子查询确实正确处理带有空格的参数(添加单引号时)。

该查询使用多个表,因此 db.Query 不是一个选项。

所以现在我正在使用 BuildQueryString 并将其输入 rawQuery。相同的故事。即使我将“AAA BBB”字符串直接硬编码到 BuildQueryString 的输入中。还有其他方法我应该使用 BuildQueryString 的结果吗?

有人知道这样做的方法吗???

4

1 回答 1

3

这是您要执行的操作的示例:

database.rawQuery("SELECT bar FROM Foo WHERE bar = 'AAA BBB'", null);

如果 SQL 注入是一种威胁,并且您在以下位置有“AAA BBB” String myName

database.rawQuery("SELECT bar FROM Foo WHERE bar = ?", new String[] { myName });

但我不确定“在更复杂的层面上意味着什么”......也许是这样的:

database.rawQuery("SELECT bar FROM Foo WHERE bar LIKE ? ORDER BY bar = ?, bar LIKE ?, bar LIKE ?", new String[] { myName, myName, myName + "%", "%" + myName + "%" });
于 2012-06-18T19:17:34.687 回答