MST

星途 面试题库

面试题:SQLite中SQLiteQueryBuilder如何进行多表关联查询

在Android开发中,使用SQLiteQueryBuilder对两个相关联的表进行查询,假设存在用户表(user,包含字段id、name、age)和订单表(order,包含字段id、user_id、order_amount),如何通过SQLiteQueryBuilder获取每个用户及其对应的订单总金额,请阐述实现思路并给出核心代码片段。
15.8万 热度难度
数据库SQLite

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 使用 SQLiteQueryBuilder 类来构建查询。
  2. 关联 user 表和 order 表,通过 user.id = order.user_id 进行关联。
  3. 对订单金额进行求和操作,以获取每个用户对应的订单总金额。
  4. 按用户 id 进行分组,确保每个用户只出现一次并正确计算其订单总金额。

核心代码片段

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;

public class DatabaseHelper {
    private SQLiteDatabase db;

    public DatabaseHelper(SQLiteDatabase db) {
        this.db = db;
    }

    public Cursor getUsersWithTotalOrderAmount() {
        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
        qb.setTables("user JOIN order ON user.id = order.user_id");

        String[] projectionIn = {"user.id", "user.name", "user.age", "SUM(order.order_amount) AS total_amount"};
        String groupBy = "user.id";

        return qb.query(db, projectionIn, null, null, groupBy, null, null);
    }
}

在上述代码中:

  1. SQLiteQueryBuilder 通过 setTables 方法设置要关联的表。
  2. projectionIn 定义了要查询的字段,包括用户表的 idnameage 以及对订单金额求和后命名为 total_amount 的字段。
  3. groupBy 按用户 id 进行分组,以计算每个用户的订单总金额。
  4. 最后通过 qb.query 方法执行查询并返回 Cursor,其中包含每个用户及其对应的订单总金额。