java - Android SQLite 使用 IN() 进行查询

标签 java android sqlite android-sqlite

我有以下型号

类别(id、名称、is_active) 地点(id,名称,category_id,......)

根据用户偏好,类别将为0 或1。基于此偏好,我想查询所有 categories.is_active = 1 的地点。

我认为有两种方法

第一种方法

  1. 查询并获取所有is_active = 1的Category
  2. 从上面检索到的类别 ID 集合中获取所有地点的列表。

第二种方法

使用 JOIN 编写 RawQuery 并设置条件。

优化速度的最佳方法是什么?

我尝试过什么?

// Get Active Categories
public Cursor getActiveCategories() {
    return db.query(TABLE_CATEGORIES, new String[] { COLUMN_ID,
            COLUMN_NAME, COLUMN_SLUG, COLUMN_ACTIVE }, COLUMN_ACTIVE + "="
            + "'1'", null, null, null, COLUMN_NAME, null);
}


// Get Places
public Cursor getPlaces() {
    return db.query(TABLE_PLACES, new String[] { COLUMN_ID, COLUMN_NAME },
            " type IN ('1','2')", null, null, null, null);
}

在上面的代码中,如何动态插入类型 IN ('1','2') 以便我可以从第一个方法的结果中填充该类型?

最佳答案

单个 rawQuery 几乎总是比两个单独的查询更快。由于 rawQuery 中没有任何参数,因此它会非常简单,类似于;

SELECT places.* 
FROM places 
JOIN categories
  ON places.category_id = categories.id
WHERE categories.is_active = 1

关于java - Android SQLite 使用 IN() 进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14285111/

相关文章:

c - 库例程调用无序错误

mysql - 我可以在 SQL UPDATE 中使用内部 SELECT 吗?

java - 无法使用搜索工具在 liferay portlet 中搜索期刊文章

android - 手机SSRS报告如何处理

android - 如何同时使抽屉导航选框 ListView 中的所有 TextView ?

android - 应用程序关闭后粘性服务重新启动

django - 如何删除 Django 1.9 中的 DB (sqlite3) 以从头开始?

java - 如何循环遍历数组并从 ArrayList 创建子字符串?

java - 如何在 Activity 之间发送自定义对象数组?

Java 正则表达式非常慢(将嵌套量词转换为所有格量词)