【问题标题】:FMDB SQLite wrapper and user defined/custom functionsFMDB SQLite 包装器和用户定义/自定义函数
【发布时间】:2011-05-13 09:11:37
【问题描述】:

我目前正在将 FMDB 用于 iPhone 应用程序,我正在寻找它......好吧。它确实是一个很棒的小型 SQLite 包装器。

FMDB GitHub: https://github.com/ccgus/fmdb

唯一的问题是我需要使用自定义函数。在 SQLite 中,我可以使用以下语法轻松地做到这一点:

sqlite3_create_function(database, "custom", 4, SQLITE_UTF8, NULL, &customFunc, NULL, NULL);

除了 FMDB,我认为没有办法使用自定义函数?

如果我错了,请纠正我。任何帮助将不胜感激。

【问题讨论】:

  • FMDB 似乎是一个轻量级的 jdbc,比如包装器。它不支持过多的自定义。我喜欢它在不深入 sqlite3 函数的情况下工作基本 sql 查询。
  • @karim 你能推荐任何其他适用于 iPhone 的 SQLite 包装器来处理自定义函数吗?

标签: iphone objective-c sqlite wrapper fmdb


【解决方案1】:

【讨论】:

  • 感谢您的回答! :)
【解决方案2】:

FMDB 是开源的,你可以添加一个包装方法来包装创建一个新的 SQLite 函数。应该不难。您可以使用其他包装器方法作为您应该如何完成此操作的模板。

也许您可以将您添加的内容回馈给社区?

【讨论】:

  • 这是一个想法,我实际上可能对此有所了解。
  • 或者只是为FMDB创建一个Category,如github.com/ccgus/fmdb/blob/master/src/FMDatabaseAdditions.[hm]所示
  • @Fulvio - Cesar 使用的是简写。他让你知道有两个相同的 URL,除了它们的扩展名。如果您使用 .h 或 .m 代替 .[hm],则 URL 有效
  • 真的应该看看下面@ccgus 的回答——他写了 FMDB 并且知道发生了什么。
【解决方案3】:

我知道这是一个老问题,但以下应该可行:

FMDatabase *database = [FMDatabase databaseWithPath:dbPath];

[database open];

sqlite3_create_function([database sqliteHandle], "distance", 4, SQLITE_UTF8, NULL, &distanceFunc, NULL, NULL);

FMResultSet *results = [database executeQuery:@"SELECT * from stores WHERE distance(latitude, longitude, -37.77023, 148.089688) < 1"];

显然,您会使用 custom 和 customFunc(或其他)代替 distance 和 distanceFunc,但您明白了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    相关资源
    最近更新 更多