gpt4 book ai didi

android - 我可以使用 ContentResolver.query() 执行这个 Android 查询吗? (左连接和大小写)

转载 作者:IT老高 更新时间:2023-10-28 23:09:07 25 4
gpt4 key购买 nike

我希望在 Android 上执行以下查询(以伪代码形式):

SELECT C.ID, C.NAME, CASE ISNULL(G.GROUPID,0) = 0 THEN 0 ELSE 1 END INGROUP
FROM CONTACTS C
LEFT JOIN GROUPMEMBERSHIP G ON G.CONTACTID = C.ID AND G.GROUPID = ?

我希望通过默认的 Contacts ContentProvider 选择系统通讯录中所有联系人的 ID 和姓名,以及0/1 字段指示联系人是否是组 ? 的成员。

我当然可以很容易地获取所有联系人,然后在我的 Adapter 类中很容易地循环并分别查询成员资格,但我想将这两个查询作为一个外部连接查询执行会产生更好的性能。

我可以使用标准的高级字符串投影和 ContentResolver.query() 方法来做到这一点吗?还是这种查询需要深入挖掘更直接的 SQL 执行?

最佳答案

编辑: 好的,所以这实际上并不能解决所提出的问题,因为 eidylon 与他们的问题中提到的现有 ContentProvider 相关联。但是,如果您拥有 ContentProvider 源和 API,这确实涵盖了如何执行 JOIN。所以我会把它留给那些想知道如何处理这种情况的人。


这很简单!但是不直观... :)

query(Uri uri, String[] projection, String selection, 
String[] selectionArgs, String sortOrder)

好的,那么 URI 是什么?通常,每个表都有一个 URI。

content://com.example.coolapp.contacts 从您的 CONTACTS 表中提供数据。content://com.example.coolapp.groupmembers 从您的 GROUPMEMBERSHIP 表中提供数据。

但 URI 实际上只是一个字符串。随心所欲地使用它。在您的 ContentProvider 中创建一个响应 content://com.example.coolapp.contacts_in_group 的代码块。在 ContentProvider 中的代码块中,您可以获得对 SQLite DB 的原始访问权限,而不受有限的 query() 数据模型的限制。随意使用!

根据需要定义您的选择字段。他们没有映射到表列名——按照你需要的方式映射它们,以便获取你的参数。

根据需要定义投影——它可能包含连接后两个表中的列。

Bing,你完成了。谷歌在他们自己的代码中内部使用了同样的模型——去看看联系人提供者 API——你会看到“bla.RawContact”和“bla.Contact”等作为内容 URI。每个都从数据库中的同一张表中提供数据——不同的 URI 只是为同一张表提供不同的 View !

关于android - 我可以使用 ContentResolver.query() 执行这个 Android 查询吗? (左连接和大小写),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6338802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com