FlexileDatabase 0.1.4

FlexileDatabase 0.1.4

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布上次发布2014年12月

无人认领维护。



  • 作者
  • Aaron Hayman

Flexile 数据库

Flexile 数据库是一组类,用于以面向对象的方式帮助管理 SQLite 数据库中的信息(目前仅限 iPhone)。我在自己的应用 Flexile 中主要使用这个库。头文件已经完全文档化,因此你可以在那里了解很多有关使用方法。

有一个依赖项:Flexile Toolkit。这是我在大部分项目中使用的一组类、定义、函数等。

警告:目前,虽然这些类能处理几乎在 SQLite 数据库上可以执行的所有类型的更新,但它们只处理单表查询。我打算在不久的将来添加联合查询……一旦我有时间。

特性

  1. SQLStatement 可以以全面向对象的方式构建,这允许你复用列、谓词、语句等。绝对不需要“字符串拼接” :).
  2. 完全支持聚合、分组和列别名。
  3. SQLPredicate 组允许你以树形结构创建和管理复杂谓词。
  4. SQLStatement 和其所有对象都可以进行深度复制。这允许你将一个实例作为模板来保存并重复使用。
  5. Flexile 数据库使用一个全局唯一标识系统(GUID……我喜欢这样称呼它)。它是一个标准的 36 个字符的字符串,用作主键。虽然可以使用 GUID 在查找上降低效率,但它也使数据库在与同步、合并等操作时更加兼容。
  6. 完全管理数据库访问,包括基于块的异步查询/更新以及同步访问。可以将 SQL 语句组合成一个队列并作为一个单一事务进行处理以提高效率(同时也支持更新的回滚支持)。
  7. 自动表更新可以接受一个 SQLStatement 并通过添加适当的列来更新底层表。
  8. 每个文件单例行为。每个数据库文件只能实例化一个 SQLDatabaseManager,确保在各个管理器之间不会发生冲突。
  9. 表管理器注册允许你将特定的类注册给数据库管理器,并返回只包含一个管理器实例的单例,这对于确保每个数据库管理器只实例化一个实例非常有用。
  10. 为获取数据库和表元信息提供了专门的 SQLStatement 构造函数。
  11. 默认情况下,查询返回一个 NSArrayNSMutableDictionary 项目。然而,你也可以传递一个行类并返回一个任何类类型的 NSArray(只要你指定的类通过列名作为键路径响应),
  12. 可以处理以下数据类型:NSStringNSNumberNSDateUIImageNSData

结构

此工作有两个主要方面:SQLDatabaseManagerSQLStatement。首先构造一个 SQLStatement,通过设置其类型并向其中添加列、条件、排序等。然后,将 SQLStatement 传递给 SQLDatabaseManager,它将在数据库上执行 SQL 语句,并直接或通过快照(对于异步调用)返回结果。所有 SQL 语句都在后台队列中运行,并且结果通常通过返回快照返回到主队列(取决于是查询还是更新)。SQL 语句可以同步提交,但通常建议尽可能保持查询异步。有关更多信息,请参阅头文件。

SQLStatement

SQLStatement 当前是创建 SQL 语句并将其作为参数提供给 SQLDatabaseManager 进行处理的主要对象。它使用代表 SQL 语句主要部分的各类对象。并不是所有对象(或它们的属性)都在所有情况下使用,没有适用的对象将被简单地忽略。这使得只需通过更改 SQLStatementType 就可以轻松地转换 SQL 查询到更新。

  • SQLColumn:这代表 SQL 语句中的基本列。`SQLColumn` 有许多属性,其中许多仅在特定类型的查询/更新中使用。您需要查看头文件以获取有关如何使用此类的更多信息。
  • SQLOrder:这代表查询中表的列的排序。对更新不适用。
  • SQLPredicate & SQLPredicateGroup:`SQLPredicate` 代表 "WHERE" 语句中的单个评估。例如:name = "Aaron"name LIKE "Hayman"。您可以使用各种运算符(小于、大于、不等于、等于等)。`SQLStatement` 还提供额外的功能,通过在操作中包含 `NULL` 值来处理 "小于" 类型。`SQLPredicateGroup` 可用于将多个谓词组合在一起并嵌套它们(一个组可以包含另一个组)。这使您可以通过将组在语句中自动用括号包围来完全控制谓词的评估。它还允许您以“模块化”的方式组织您的谓词。

SQLDatabase.h/.m

我没有使用 FMDB 包装器。坦率地说,这并不是一个战略上的决策,而是一个更深入地向 SQLite 打交道的愿望。根据我所看到的 FMDB 包装器,我的同级类 SQLDatabase 很相似。我想我做得有些不同,大多是为与 SQLDatabaseManager 一起使用而量身定制的,可能在功能上简单一些,但总体来说,想法差不多。

持续开发

我在我的生产应用 Flexile 中使用这个系统,所以错误修复和附加功能将是持续的。如果您有功能需求或建议,请告诉我,我会看看我能做什么。

[email protected]

我已经规划了一些功能。再次强调,我不知道我何时会完成它们,但是因为我每天使用这个系统,这可能不会永远占用很长时间。

  1. 多表/联合查询。我相信这将为 Flexile 数据库的功能画上圆满的句号。
  2. Class 创建一个 SQLStatement(或可能是列列表)。
  3. 这与前面提到的相关:将对象提交给 FlxDatabaseManager 作为更新(它将自动创建适当的 SQLStatement)。这需要提交的对象至少有属性:@property (strong) NSString *GUID