我现在正在将FMDB用于iPhone应用程序而且我找到了......好吧。这确实是一个很棒的SQLite包装器。
FMDB GitHub: https://github.com/ccgus/fmdb
唯一的问题是我需要使用自定义功能。在SQLite中,我可以使用以下语法轻松完成此操作:
sqlite3_create_function(database, "custom", 4, SQLITE_UTF8, NULL, &customFunc, NULL, NULL);
除了使用FMDB我不认为有办法使用自定义功能吗?
如果我错了,请纠正我。任何帮助将不胜感激。
答案 0 :(得分:8)
你想要FMDatabase的makeFunctionNamed:maximumArguments:withBlock:method:
https://github.com/ccgus/fmdb#making-custom-sqlite-functions-based-on-blocks https://github.com/ccgus/fmdb/blob/master/src/fmdb.m#L1033
答案 1 :(得分:1)
FMDB是开源的,你可以添加一个包装器方法来包装创建一个新的SQLite函数。应该不难。您可以使用其他包装器方法作为模板来完成此操作。
也许你可以将你的补充贡献给社区?
答案 2 :(得分: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"];
显然,您可以使用custom
和customFunc
(或其他)代替distance
和distanceFunc
,但您明白了。