2012-11-02 17 views
10

Ich möchte das Zinsfeld in meiner Datenbank aktualisieren. Meine SQL-Abfrage ist wie nach untenSo finden Sie die Leistung einer Zahl in SQLite

aktualisieren Table_Name Interesse gesetzt Haupt = * Power ((1 + (Preis/ 100), Jahr)

Diese Abfrage funktioniert in MySQL, aber don‘ t Arbeit mit SQLite.

Der Fehler sagt, dass No Power funcation

gefunden

Wer weiß, wie dieses Problem zu lösen, wie ich dies mit Abfrage zu tun haben, denn ich brauche um mehr als 3000 Datensätze gleichzeitig zu aktualisieren.

Antwort

13

sqlite hat nicht viele Funktionen zur Verfügung. Aber die gute Nachricht ist, dass es einfach genug ist, um Ihre eigenen hinzuzufügen.

zuerst eine Potenzfunktion schreiben:

void sqlite_power(sqlite3_context *context, int argc, sqlite3_value **argv) { 
    double num = sqlite3_value_double(argv[0]); // get the first arg to the function 
    double exp = sqlite3_value_double(argv[1]); // get the second arg 
    double res = pow(num, exp);     // calculate the result 
    sqlite3_result_double(context, res);  // save the result 
} 

Dann müssen Sie die Funktion registrieren:

int res = sqlite3_create_function(dbRef, "POWER", 2, SQLITE_UTF8, NULL, &sqlite_power, NULL, NULL); 

Die 2 ist die Anzahl der Argumente für die Funktion. dbRef ist natürlich die sqlite3 * Datenbankreferenz.

0

Bitte versuchen Sie diesen Link:

http://www.sqlite.org/contrib

prüfen die Erweiterung-functions.c Datei. Versuchen Sie es in XCode zu verwenden.

Hoffe, dass es

helfen
1

http://richkidsondrugs.tumblr.com/post/165870389/upgrading-sqlite-to-support-math-functions-on-cocoa

Schritt der Math-Erweiterungen Bibliothek, die einige wunderbare Person namens Liam Healy schrieb zu bauen war:

Geben Sie folgenden Befehl im Terminal:

Schritt 1) Download/Öffnen Sie den Link http://sqlite.org/contrib/download/extension-functions.c?get=25

Schritt 2) Gehe zu Ort, wo extens ion-functions.c wird heruntergeladen. Run command "gcc -fno-common -dynamiclib extension-functions.c -o libsqlitefunctions.dylib". Dies wird Datei libsqlitefunctions.dylib am selben Ort erstellen, dann können Sie das in Ihrer ios-Anwendung von xcode verwenden.

“SELECT load_extension(’libsqlitefunctions.dylib’);” 

und dann haben Sie Zugriff auf alle Arten von glorreichen Methoden wie COS, SQRT, etc:

Jetzt in Ihrem Kakao App können Sie hinzufügen! Sie können sie in Ihrer App wie folgt verwenden:

//Activate database loading 
sqlite3_enable_load_extension(database, 1); 
sqlite3_load_extension(database,”libsqlitefunctions.dylib”,0,0); 
2

Wenn Sie SQLite NuGet-Paket in einem verwenden.NET-Projekt können Sie eine Erweiterungsmethode schreiben und zur Laufzeit binden;

[SQLiteFunction("pow", 2, FunctionType.Scalar)] 
public class SQLitePowerExtension : SQLiteFunction 
{ 
    public override object Invoke(object[] args) 
    { 
     double num = (double)args[0]; 
     double exp = (double)args[1]; 

     return Math.Pow(num, exp); 
    } 
} 

Und dann verwenden Sie es so;

using (var conn = new SQLiteConnection("Data Source=:memory:")) 
{ 
    conn.Open(); 
    conn.BindFunction(typeof(SQLitePowerExtension).GetCustomAttribute<SQLiteFunctionAttribute>(), new SQLitePowerExtension()); 

    var comm = new SQLiteCommand("CREATE TABLE test (num REAL, exp REAL, result REAL)", conn); 
    comm.ExecuteNonQuery(); 

    // Populate with some data - not shown 

    comm = new SQLiteCommand($"UPDATE test SET result = pow(num, exp))", conn); 
    comm.ExecuteNonQuery(); 
} 
Verwandte Themen