2011-09-15 27 views
10

Tôi đang thử làm việc trên ứng dụng iOS cho phép người dùng đồng bộ hóa cơ sở dữ liệu sqlite của họ qua Bluetooth bằng GameKit. Có cách nào để thực hiện tương đương với .dump trên vỏ sqlite bằng cách sử dụng bất kỳ của nhiều thư viện mục tiêu sqlite-c?Có tương đương sqlite .dump trong mục tiêu-c không?

+1

Hiện không có lớp sẵn sàng để sử dụng cho lệnh kết xuất này. Nó không nên quá khó đọc tất cả các bảng và tạo ra một dump.sql với các stertement INSERT. –

+1

Điều gì đó có thể hữu ích: Bạn có thể nhận danh mục bảng bằng cách thực hiện truy vấn vào bảng hệ thống 'sqlite_master' (nghĩa là "SELECT * FROM sqlite_master;"). Nếu bạn lặp lại kết quả, bạn có thể lấy tên bảng từ trường 'tbl_name' và trường 'sql' chứa câu lệnh 'CREATE TABLE'. Phân tích cú pháp sau để lấy tên trường. – mpemburn

Trả lời

-1

Tôi không nghĩ vậy. Tuy nhiên, bạn có thể thực thi câu lệnh SELECT * và sau đó lặp qua argc trong hàm gọi lại.

Something như

void callback (void *param, int argc, char **argv, char **azColName) 
{ 
    for(int i=0;i<argc;i++) 
    { 
     get ... azColName[i] ... argv[i] 
    } 
} 
+0

Bạn có thể mở rộng câu trả lời này để cung cấp thêm một chút ngữ cảnh không? Tôi nghĩ rằng tôi hiểu nhiều hơn hoặc ít hơn những gì bạn đang nói, nhưng tôi không hoàn toàn chắc chắn như thế nào nó sẽ làm việc trong một ứng dụng thực tế. – buildsucceeded

3

Bạn có thể tạo một tập tin cơ sở dữ liệu sao lưu, gửi mà hơn và sau đó thực hiện việc sáp nhập trên thiết bị đích. Mã để tạo tệp sao lưu như sau:

- (void) exportDB { 

    sqlite3 *sourceDB, *destinationDB; 
    sqlite3_backup *sql3Backup; 

    NSString *sourceDBPath = @"/path/to/source/database"; 
    NSString *destinationDBPath = @"/path/to/destination/database"; 

    if(sqlite3_open([sourceDBPath UTF8String],&sourceDB) != SQLITE_OK){ 
     NSLog(@"%s\n",sqlite3_errmsg(sourceDB)); 
     return ; 
    } 

    if(sqlite3_open([destinationDBPath UTF8String],&destinationDB) != SQLITE_OK){ 
     sqlite3_close(sourceDB); 
     NSLog(@"%s\n",sqlite3_errmsg(destinationDB)); 
     return; 
    } 

    sql3Backup = sqlite3_backup_init(destinationDB,"main",sourceDB,"main"); 
    if(sql3Backup == NULL){ 
     sqlite3_close(sourceDB); 
     sqlite3_close(destinationDB); 
     NSLog(@"%s\n",sqlite3_errmsg(destinationDB)); 
     return; 
    } 

    if(sqlite3_backup_step(sql3Backup, -1) != SQLITE_DONE){ 
     NSLog(@"%s\n",sqlite3_errmsg(destinationDB)); 
     return; 
    } 

    if(sqlite3_backup_finish(sql3Backup) != SQLITE_OK){ 
     NSLog(@"%s\n",sqlite3_errmsg(destinationDB)); 
     return; 
    } 

    sqlite3_close(sourceDB); 
    sqlite3_close(destinationDB); 
} 
Các vấn đề liên quan