2

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

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

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

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

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

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

4

3 回答 3

8

你想要 FMDatabase 的 makeFunctionNamed:maximumArguments:withBlock: 方法:

https://github.com/ccgus/fmdb#making-custom-sqlite-functions-based-on-blocks https://github.com/ccgus/fmdb/blob/master/src/fmdb.m#L1033

于 2013-10-29T23:53:07.700 回答
1

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

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

于 2010-11-21T19:55:55.153 回答
1

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

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"];

显然,你会使用customand customFunc(或其他)代替distanceanddistanceFunc但你明白了。

于 2013-10-29T12:51:42.153 回答