我正在尝试在 Android 中执行 SQL 查询,如下所示:
SELECT * FROM Flashcards WHERE (category = 'Anatomy' OR category = 'Surgery') AND (difficulty = 'Easy' OR difficulty = 'Medium');
类别和难度的数量在运行时由用户选择确定。到目前为止,我已经尝试使用带有查询参数的原始查询,但我觉得在这种情况下我正在与框架作斗争:
String query = "SELECT * FROM Flashcards WHERE (?) AND (?) ORDER BY RANDOM() LIMIT 1";
Cursor cursor = db.rawQuery(query, queryParameters);
我试过传入的查询参数包括:
category = 'Anatomy' OR category = 'Surgery'
和:
category = Anatomy OR category = Surgery
查询一直没有返回结果。在外部对同一数据库执行的相同查询会返回结果。
最佳答案
尝试:
String query = "SELECT * FROM Flashcards WHERE category = ? OR category = ? ORDER BY RANDOM() LIMIT 1";
Cursor cursor = db.rawQuery(query, queryParameters);
仅供引用,参数位置应该用 ?签名。
更新:
当您想在运行时传递字段名称和值时,您可以构建格式化字符串,例如:
String query = "SELECT * FROM Flashcards WHERE %s AND %s ORDER BY RANDOM() LIMIT 1";
Cursor cursor = db.rawQuery(String.format(query, queryParameters));
您必须在其中构建 queryParameters
值,如您所提到的,category = 'Anatomy' OR category = 'Surgery'
。
关于带有动态 Where 子句的 Android rawquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21299649/