带有动态 Where 子句的 Android rawquery

标签 android sqlite

我正在尝试在 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/

相关文章:

android - appium 无法在文本字段中输入内容

android - 如何在主 Activity 之前获得登录 Activity

android - 在观察目录下检索重命名文件的新旧路径

ios - 在 NSString 中写入 %

linux - sqlite 在 tcl 脚本中通过 nfs 使用(或者..如何制作可以在 nfs 上运行的独立 sqlite3)

python - Python 中大数据结构的性能

android - 应用程序退出时如何停止网络回调?

android - 如何在 Eclipse 中添加 XML 可绘制对象

php - 使用 SQLite3 数据库的 PHP 登录脚本的问题

java - 通过 Activity 传递对象 (Android)