在像 SQLite 这样的嵌入式数据库中,没有客户端/服务器通信开销,因此执行大量这样的小查询实际上是可行的:
SELECT id, x, y, z FROM TableB WHERE id_A = ?
如果您真的想使用单个查询来加载所有 B 子对象,则可以使用两个单独的查询,如下所示:
SELECT id, name, foo, bar FROM TableA ORDER BY id;
SELECT id_A, id, x, y, z FROM TableB ORDER BY id_A;
然后,您将并行遍历两个游标,并为每个 A 记录收集具有相同 ID 的所有 B 记录;ORDER BY 子句确保您以正确的顺序查看它们:
cursorA = db.query(...);
cursorB = db.query(...);
cursorB.moveToFirst();
while (cursorA.moveToNext()) {
id = cursor.getInt(0);
a = new ObjectA(id, ...);
while (!cursorB.isAfterLast() &&
cursorB.getInt(0) == id) {
b = new ObjectB(...);
a.addB(b);
cursorB.moveToNext();
}
}
请注意,这可能不会比对每个 A 进行单独查询更有效,因为对id_A
列上的所有记录进行排序并不比在同一列上进行多次查找更有效。(但是,如果该列上没有索引,查找将比排序慢得多。)