gpt4 book ai didi

Android - 复杂的数据库和内容提供者

转载 作者:行者123 更新时间:2023-11-30 03:18:13 26 4
gpt4 key购买 nike

我正在设计一个具有相当复杂(规范化)数据库结构的 Android 应用程序。我的问题是,处理我的数据的最佳设计模式是什么?

该数据库有一个 Books 表、一个 Authors 表、一个 Collections(书籍)表和一个基于整数 ID 将两者相关联的联结表 Books_Collections。我说这相当复杂,因为我想以“书名(作者姓名)”的格式在 ListView 中显示特定集合中的书籍和作者列表,所以我需要能够执行以下查询(我将缩写表名 A、B、C 和 B_C):

SELECT B.title, A.name 
FROM B
JOIN A ON B.author_id = A.id
JOIN B_C ON B_C.book_id = B.id
WHERE B_C.collection_id = [variable]

我看到有人建议开发人员将他们的 Sqlite 数据库包装在内容提供程序中,以便轻松利用 Honeycomb 中引入的加载程序。但这对于如此复杂的查询真的可行吗? (如果是这样,怎么做?)还是只使用 DAO 会更好,因为我不与其他应用程序共享我的数据?如果使用 DAO,是否应该创建自定义 AsyncTaskLoader 以将数据连接到 ListView?

编辑一个更重要的细节:我想根据 Books 中的 bool 变量更改列表项的背景颜色,标记该书是否已阅读,并且上下文菜单将允许用户从列表中删除书籍,因此列表需要立即适应数据变化。

最佳答案

是的,是可行且容易完成的

我不是专家,但我遵循谷歌在其 Google I/O 应用程序上使用的模式

https://code.google.com/p/iosched/

检查提供程序包,其中包含使用该模式所需的 3 个类

  • ScheduleDatabase.java

(sqlite3数据库的定义)

  • ScheduleProvider.java

(附加到此数据库的内容提供者)

  • ScheduleContract.java

(契约(Contract)定义为公开提供者)

就个人而言,在加入的情况下

在我定义的数据库文件中

interface Tables {
String TABLE1= "table1";
String TABLE2= "table2";

// JOINS
String TABLE1_JOIN_TABLE2 = "table1"
+ "LEFT OUTER JOIN table2 ON table1.table_id= table2.tableid";

}

然后在您的提供者中将提供者实体映射到此连接。

关于Android - 复杂的数据库和内容提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19665928/

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