2013-01-17 124 views
0

我有SQLite Studio fot我的Mac OSX,我在那裏創建了我的Schemas,在MySQL中我使用DBFork Manager案例工具來製作我的Schema,導出sql文件然後導入到MySQL服務器,所以我想用我的iOS應用程序使用SQLite做同樣的事情。我想讓我的SQLite架構,然後我需要從* .sql文件導入到我的應用程序,我給我的代碼示例使用SQL字符串...希望你能幫助我!在我的iOS應用程序中導入我的sql文件

- (void)viewDidLoad { 
NSString *docsDir; 
NSArray *dirPaths; 

// Get the documents directory 
dirPaths = NSSearchPathForDirectoriesInDomains(
               NSDocumentDirectory, NSUserDomainMask, YES); 

docsDir = dirPaths[0]; 

// Build the path to the database file 
_databasePath = [[NSString alloc] 
       initWithString: [docsDir stringByAppendingPathComponent: 
            @"contacts.db"]]; 

NSFileManager *filemgr = [NSFileManager defaultManager]; 

if ([filemgr fileExistsAtPath: _databasePath ] == NO) 
{ 
    const char *dbpath = [_databasePath UTF8String]; 

    if (sqlite3_open(dbpath, &_contactDB) == SQLITE_OK) 
    { 
     char *errMsg; 
     const char *sql_stmt = 
     "CREATE TABLE IF NOT EXISTS CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)"; 

     if (sqlite3_exec(_contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK) 
     { 
      _status.text = @"Failed to create table"; 
     } 
     sqlite3_close(_contactDB); 
    } else { 
     _status.text = @"Failed to open/create database"; 
    } 
} 
[super viewDidLoad]; 

}

+0

什麼問題呢?你不知道如何閱讀文件嗎? –

+0

我知道,但我的問題,我認爲是該SQL文件的目錄,例如我在我的項目中添加SQL文件,然後我使用: NSArray * path = NSSearchPathForDirectoriesInDomains(???,NSUserDomainMask,YES); 所以,這是我的項目的路徑,將在應用完成時可用,以及如何將NSString轉換爲字符,因爲在sqlite_exec(_db,sql_stmt < - 這裏是一個char,...) ;我必須插入一個字符而不是NSString,並且我將文件的文本恢復爲NSData或NSString ...並且在iOS 6.0中已棄用: NSString * textFile = [[NSString alloc] initWithContentsOfFile:path]; – rokimoki

回答

2

我假設你有一個的SQLite數據庫文件,並要安裝它在iPhone上使用。如果您在程序中編譯它,那麼它將位於文件包中。然而,這是隻讀的,所以如果你想改變你的數據庫,你需要將它複製到iphone的文檔目錄(或另一個更合適的目錄)。退房的回答這個問題計算器:

SQLite on iPhone

+0

好的,謝謝,這意味着我可以在編譯之前在「文檔」目錄中添加文件,然後更改它的代碼。 – rokimoki

+1

當您將文件添加到項目中時,它會在項目的包中結束。一旦您的應用程序安裝在設備上,您的應用程序必須先將原始數據庫複製到文檔目錄(或其他可寫目錄),然後才能獲得對數據庫的寫入訪問權限。 (即您必須從應用程序打開目錄中的數據庫,而不是打包數據庫中的數據庫)。 –

相關問題