当前位置: 首页 > 知识库问答 >
问题:

当CursorLoader的构造函数不支持时如何在其中使用联接查询

颜霖
2023-03-14

我有两个1:N关系的表,我使用内容提供程序和CursorLoader。

我如何使连接查询与光标加载器一起工作?我可以用内容提供程序内部的rawSql来解决它,但如何在游标加载器构造函数中做到这一点我无法理解。

CursorLoader(上下文上下文,Uri Uri,String[]投影,String selection,String[]selectionArgs,String sortOrder)

当Uri只能指向一个表时,如何查询联接

共有1个答案

赵经国
2023-03-14

URI不指向任何表。它指向任何你想指向的东西。

让我们假设您的两个表是customerorder。一个客户可能有很多订单。您想要执行一个查询以获取所有未完成的订单...但您希望加入一些您将需要的与客户相关的列,例如客户的姓名。

让我们进一步假设您已经定义了content:/your.authority.goes.here/customercontent:/your.authority.goes.here/order来纯粹查询这些表。

您有两个选择:

>

  • 在您的/orderURI上添加客户显示名称的联接。拥有另一个可用的列可能不会破坏提供者的任何现有消费者(尽管测试总是一个好主意)。这就是contactscontract的作用--它在所有表的几乎所有查询中加入一些基列,如联系人的姓名。

    创建内容://your.authority.goes.here/orderWithCust,它执行与/order相同的基本查询,但包含您的联接。在这种情况下,您可以使用insert()update()delete()抛出某种runtimeexception,以提醒您不应该将/OrderWithCust作为URI修改数据

    最后,设计ContentProviderURI系统类似于设计REST Web服务的URL系统。在这两种情况下,连接都必须在提供者/服务器端完成,因此您可能需要打破一个表对一个URL的基线来提供一些有用的连接。

  •  类似资料:
    • 我是在朝着正确的方向前进,还是根本不可能? 我已经能够实现一个自定义的,它由和一个自定义的支持。我只是想知道是否可以使用来实现这一点,因为严格模式会抱怨中的游标没有显式关闭。 任何帮助都将不胜感激。 我猜想方法有一些问题,因为它调用。这适用于该视图中的第一个条目,但不适用于后续条目。在这一点上我不太确定出了什么问题。 更新2 所以我已经确定了问题。问题是TextWatcher的方法。选择终止第一个

    • 以下MySQL查询是等效的: 然而,行构造器表单(即第一个示例)的强大之处在于,您可以使用它来处理查询任意长度的值对列表。没有它,您必须编写动态sql,这是一个安全风险。使用第一个表单避免了这个棘手的问题。 但是,如何使用预准备状态在JDBC中表示这一点?例如: 我已经研究了setArray,但是如何在数组的值中表示列1和列2的值?我想知道是否接口可以作为这个管道。但是阅读文档时,我看不出它是如何

    • 问题内容: 在Jackson中,当您使用注释构造函数时,必须使用注释其参数。所以这个构造函数 变成这个: 我不明白为什么有必要。你能解释一下吗? 问题答案: Jackson必须知道以什么顺序将字段从JSON对象传递给构造函数。使用反射无法在Java中访问参数名称-这就是为什么您必须在注释中重复此信息的原因。

    • 问题内容: 如何使用call_user_func_array调用类的构造函数 这是不可能的: 因为如果构造函数具有参数,则 新的 将失败。 约束:我不控制必须实例化的类,也不能修改它们。 不要问我为什么要做这个疯狂的事情,这是一个疯狂的考验。 问题答案: 您可以像这样使用反射: 从PHP 5.6.0起,也可以将运算符用于此目的。

    • 鉴于 IntelliJ IDEA 2016.1.1报告“可以替换为方法引用”。 我知道无参数构造函数的< code>Foo::new语法,但是不知道如何将< code>foo作为参数传入。我肯定漏掉了什么。

    • 问题内容: 构造函数何时被调用? 创建对象之前。 在对象创建期间。 创建对象之后。 问题答案: 分配对象内存,初始化具有初始值的字段变量,然后调用构造函数,但是其代码在对象超类的构造函数代码之后执行。