2010-11-21 17 views
2

Ich benutze FMDB für eine iPhone App im Moment und ich finde es ... okay. Es ist wirklich ein großartiger kleiner SQLite-Wrapper.FMDB SQLite Wrapper und benutzerdefinierte/benutzerdefinierte Funktionen

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

Das einzige Problem ist, ich bin benötigen eine benutzerdefinierte Funktion zu verwenden. In SQLite kann ich dies leicht durch die folgende Syntax verwenden:

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

Außer mit FMDB Ich glaube nicht, dass es eine Möglichkeit, eine benutzerdefinierte Funktion zu benutzen?

Korrigieren Sie mich, wenn ich falsch liege. Jede Hilfe würde sehr geschätzt werden.

+0

FMDB scheint ein geringes Gewicht jdbc wie Wrapper. Es unterstützt nicht zu viel Anpassung. Ich mag es für die grundlegende SQL-Abfrage, ohne tief in die Funktionen von sqlite3 zu gehen. – karim

+0

@karim Können Sie andere SQLite Wrapper für das iPhone empfehlen, die benutzerdefinierte Funktionen verarbeiten? – fuzz

+0

Es tut mir leid, ich habe keine Ahnung. – karim

Antwort

1

FMDB ist Open Source, Sie könnten eine Wrapper-Methode hinzufügen, um die Erstellung einer neuen SQLite-Funktion zu beenden. Sollte nicht schwierig sein. Sie können die anderen Wrapper-Methoden als Vorlagen verwenden, um dies zu erreichen.

Vielleicht könnten Sie Ihre Ergänzungen zurück in die Community beitragen?

+0

Das ist eine Idee, ich könnte tatsächlich einen Riss haben. – fuzz

+0

oder erstellen Sie einfach eine Kategorie für FMDB, wie in https://github.com/ccgus/fmdb/blob/master/src/FMDatabaseAdditions.[hm] –

+0

@Fulvio - Cesar verwendete kurze Hand. Er lässt Sie wissen, dass es zwei URLs gibt, die bis auf ihre Erweiterung identisch sind. Die URLs funktionieren, wenn Sie '.h' oder' .m' anstelle von [hm] verwenden. – Jasarien

1

Ich weiß, dass dies eine alte Frage, aber die folgenden sollte funktionieren:

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

Offensichtlich Sie custom und customFunc (oder was auch immer) anstelle von distance und distanceFunc verwenden würde, aber Sie bekommen die Idee.

Verwandte Themen