2012-11-02 50 views
10

Tôi muốn cập nhật trường Sở thích trong cơ sở dữ liệu của mình. truy vấn SQL của tôi là như theo bên dướiCách tìm số điện trong một số trong SQLite

Cập nhật Table_Name thiết lập lãi = Principal * Power ((1 + (tỷ lệ/ 100), năm)

Truy vấn này hoạt động tốt trong MySQL nhưng don' t làm việc với SQLite.

lỗi nói rằng Không có điện funcation tìm thấy

có ai biết làm thế nào để giải quyết vấn đề này như tôi phải làm điều này truy vấn sử dụng, vì tôi cần cập nhật hơn 3000 bản ghi cùng một lúc.

Trả lời

13

sqlite không có nhiều chức năng khả dụng. Nhưng tin tốt là đủ dễ dàng để thêm của riêng bạn.

đầu tiên viết một chức năng điện:

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 
} 

Sau đó, bạn cần phải đăng ký chức năng:

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

Các 2 là số đối số cho hàm. dbRef tất nhiên là tham chiếu cơ sở dữ liệu sqlite3 *.

1

SQLite không cung cấp chức năng hoặc nhà điều hành nguồn. Bạn sẽ phải tự mình triển khai thông qua sqlite3_create_function….

0

Vui lòng thử liên kết này:

http://www.sqlite.org/contrib

Kiểm tra các tập tin mở rộng-functions.c. Hãy thử sử dụng nó trong XCode.

Hy vọng nó sẽ giúp

1

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

Bước là để xây dựng các phần mở rộng thư viện Math rằng một số người tuyệt vời tên là Liam Healy đã viết:

Nhập lệnh sau trong terminal:

Bước 1) Tải xuống/Mở liên kết http://sqlite.org/contrib/download/extension-functions.c?get=25

Bước 2) Chuyển đến vị trí mở rộng ion-functions.c được tải xuống. Chạy lệnh "gcc -fno-common -dynamiclib extension-functions.c -o libsqlitefunctions.dylib". Điều này sẽ tạo ra tập tin libsqlitefunctions.dylib tại cùng một vị trí sau đó bạn có thể sử dụng nó trong ứng dụng ios của bạn từ xcode.

Bây giờ trong ứng dụng của ca cao của bạn, bạn có thể thêm:

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

và sau đó bạn có quyền truy cập vào tất cả các loại phương pháp rực rỡ như COS, SQRT, vv! Bạn có thể sử dụng chúng trong ứng dụng của mình như thế này:

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

Nếu bạn đang sử dụng gói NuGet SQLite trong a.NET dự án, bạn có thể viết một phương pháp mở rộng và ràng buộc nó tại thời gian chạy;

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

Và sau đó sử dụng nó như thế này;

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(); 
} 
Các vấn đề liên quan