2011-09-15 12 views
10

Próbuję pracować nad aplikacją na iOS, która pozwoli użytkownikom synchronizować bazy danych sqlite przez Bluetooth za pomocą GameKit. Czy istnieje sposób na wykonanie odpowiednika .dump na powłoce sqlite za pomocą dowolnej z wielu bibliotek SIClite target-c?Czy w obiekcie c znajduje się równoważnik sqlite .dump?

+1

Dla tej komendy dump nie ma gotowej do użycia klasy. Nie powinno być zbyt trudne czytanie wszystkich tabel i generowanie dump.sql ze statusem INSERT. –

+1

Coś, co może pomóc: możesz uzyskać katalog tabel, wysyłając zapytanie do tabeli systemowej "sqlite_master" (np. "SELECT * FROM sqlite_master;"). Jeśli dokonasz iteracji wyników, możesz pobrać nazwę tabeli z pola "nazwa_tabliczna", a pole "sql" zawiera instrukcję "STWÓRZ TABELĘ". Przetwórz te ostatnie, aby uzyskać nazwy pól. – mpemburn

Odpowiedz

-1

Nie sądzę. Można jednak wykonać instrukcję SELECT *, a następnie iterować po argc w funkcji wywołania zwrotnego.

Coś

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

Czy możesz rozwinąć tę odpowiedź, aby podać nieco więcej kontekstu? Myślę, że rozumiem mniej więcej to, co mówisz, ale nie jestem do końca pewien, jak to będzie działać w rzeczywistej aplikacji. – buildsucceeded

3

Można utworzyć plik kopii zapasowej bazy danych, wysyłanie, że w ciągu, a następnie wykonać łączenie na urządzeniu docelowym. Kod do utworzenia pliku kopii zapasowej jest następujący:

- (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); 
} 
Powiązane problemy