2012-11-02 24 views
10

Desidero aggiornare il campo Interesse nel mio database. La mia query SQL è come come sottoCome trovare la potenza di un numero in SQLite

Aggiornamento table_name impostato interesse = Principal * Potenza ((1 + (tasso/ 100), anno)

Questa query funziona bene in MySQL, ma don' t lavoro con SQLite.

L'errore dice che No funcation Potenza trovato

qualcuno sa come risolvere questo problema, come devo farlo usando domanda, perché ho bisogno di per aggiornare più di 3000 record alla volta.

risposta

13

sqlite non ha molte funzioni disponibili. Ma la buona notizia è che è abbastanza facile aggiungere il tuo.

primo scrivere una funzione di potenza:

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 
} 

allora avete bisogno di registrare la funzione:

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

Il 2 è il numero di argomenti per la funzione. dbRef è ovviamente il riferimento al database sqlite3 *.

1

SQLite non fornisce una funzione di alimentazione o operatore. Dovrai implementarlo da solo tramite sqlite3_create_function….

0

Si prega di provare questo link:

http://www.sqlite.org/contrib

Controllare il file di estensione-functions.c. Prova ad usarlo in XCode.

La speranza è aiutare

1

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

passo era quello di costruire l'estensioni libreria matematica che qualche persona meravigliosa di nome Liam Healy ha scritto:

Inserisci seguente comando nel terminale:

Fase 1) Download/Open link http://sqlite.org/contrib/download/extension-functions.c?get=25

Passaggio 2) Vai al percorso dove si estende ion-functions.c è scaricato. Esegui il comando "gcc -fno-common -dynamiclib extension-functions.c -o libsqlitefunctions.dylib". Questo creerà il file libsqlitefunctions.dylib nello stesso posto, quindi lo si può usare nell'applicazione ios da xcode.

Ora nel tuo cacao applicazione è possibile aggiungere:

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

e poi si ha accesso a tutti i tipi di metodi gloriosi come COS, SQRT, ecc! Puoi utilizzarli nella tua app in questo modo:

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

Se si utilizza il pacchetto SQLite NuGet in a.Progetto NET, puoi scrivere un metodo di estensione e collegarlo in fase di runtime;

[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); 
    } 
} 

E quindi utilizzarlo in questo modo;

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(); 
} 
Problemi correlati