2013-08-22 34 views
2

我想創建一個簡單的iOS應用程序。此應用程序從URL下載簡單的SQlite數據庫。 但是,當數據庫被下載並存儲在Documents文件夾中時,我無法通過某些SQLite管理器打開它,因爲它表示它已加密,儘管原始數據庫不是。iOS應用程序中的SQlite數據庫在下載後被加密

此外,讀取此數據庫的代碼不起作用,我認爲是因爲數據庫在Documents文件夾中加密。這是我到目前爲止。

-(void) downloadDatabase { 


    NSString *stringURL = @"https://www.dropbox.com/s/cq8y6x29e6ku65r/database.sqlite"; 
    NSURL *url = [NSURL URLWithString:stringURL]; 
    NSData *urlData = [NSData dataWithContentsOfURL:url]; 

    if (urlData != nil) 
    { 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 

     NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"database.sqlite"]; 
     [urlData writeToFile:filePath atomically:YES]; 
     NSLog(@"Stahujem databazu do: %@", filePath); 
    } 
} 

這是我如何在應用程序中下載數據庫。

// Get the documents directory 
    NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *docsDir = dirPaths[0]; 

    // Build the path to the database file 
    NSString *databasePath = [[NSString alloc] 
        initWithString: [docsDir stringByAppendingPathComponent: 
            @"database.sqlite"]]; 

    const char *dbpath = [databasePath UTF8String]; 
    sqlite3_stmt *statement; 

    if (sqlite3_open(dbpath, &myDatabase) == SQLITE_OK) 
    { 
     NSString *querySQL = @"SELECT * FROM CHAMPIONS"; 

     const char *query_stmt = [querySQL UTF8String]; 

     if (sqlite3_prepare_v2(myDatabase, query_stmt, -1, &statement, NULL) == SQLITE_OK) 
     { 
      [list removeAllObjects]; 
      while (sqlite3_step(statement) == SQLITE_ROW) 
      { 

       NSString *text = [[NSString alloc] 
            initWithUTF8String: 
            (const char *) sqlite3_column_text(
                    statement, 1)]; 

       [list addObject:text]; 
       statusOfGettingDataFromDB = @"Found!"; 
       NSLog(@"count: %d", [list count]); 
      } 
      sqlite3_finalize(statement); 
     } 
     sqlite3_close(myDatabase); 
    } 

而與此代碼,我試圖從數據庫中獲取一些數據。但在sqlite3_prepare_v2之後,它在最後跳轉。

你能給我一些信息我做錯了什麼嗎?並建議我如何解決這個問題? 我會很感激。謝謝。

回答

1

您正在下載的URL當前正在返回一個HTML頁面而不是SQLite文件。

因此,您寫入文檔目錄的.sqlite文件無效。如果您修改網址,您的代碼正常工作

嘗試使用此URL代替,這是在Dropbox頁面上點擊下載按鈕時點擊的實際URL。

https://dl.dropboxusercontent.com/s/cq8y6x29e6ku65r/database.sqlite?token_hash=AAH9fdYQzZ6zj8CzhKVBGMi4LcaCRCHNKIlw88wLLskRWQ&dl=1 

我想你的代碼,並打印list陣列從sqlite的數據庫獲取和這樣的結果我在日誌中獲得,

(
Ahri, 
Aatrox 
) 

希望幫助!

+2

太棒了。真的很感謝你。我應該得到一些FTP :-) – Martin

相關問題