2010-11-21 2 views
2

Я использую FMDB для приложения iPhone в настоящий момент, и я нахожу его ... ладно. Это действительно отличная оболочка SQLite.Оболочка FMDB SQLite и пользовательские/пользовательские функции

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

Единственная проблема в том, что я необходимости использовать пользовательскую функцию. В SQLite я могу легко сделать это, используя следующий синтаксис:

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

За исключением FMDB я не думаю, что есть способ, чтобы использовать пользовательскую функцию?

Исправьте меня, если я ошибаюсь. Любая помощь будет принята с благодарностью.

+0

FMDB кажется легкий вес, как JDBC обертке. он не поддерживает слишком много настроек. Мне нравится работать с базовым sql-запросом, не углубляясь в функции sqlite3. – karim

+0

@karim Можете ли вы порекомендовать любые другие оболочки SQLite для iPhone, которые будут обрабатывать пользовательские функции? – fuzz

+0

Прошу прощения, я понятия не имею. – karim

ответ

1

FMDB - это с открытым исходным кодом, вы можете добавить метод обертки для создания новой функции SQLite. Не должно быть трудно. Вы можете использовать другие методы-обертки в качестве шаблонов для того, как вы должны это сделать.

Возможно, вы могли бы внести свои дополнения обратно в сообщество?

+0

Это идея, у меня может получиться трещина. – fuzz

+0

или просто создайте категорию для FMDB, как показано на https://github.com/ccgus/fmdb/blob/master/src/FMDatabaseAdditions.[hm] –

+0

@Fulvio - Цезарь использовал короткую руку. Он дает вам знать, что есть два URL-адреса, которые являются одинаковыми, за исключением их расширения. URL-адреса работают, если вы используете вместо них '.h' или' .m'. [Hm] – Jasarien

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, но вы получите идею.

Смежные вопросы