2012-05-07 148 views
0

我目前有一個表,我可以從中提取數據。我想要做的是檢查該表是否已經存在於該包中,如果不存在,我想創建該表並將其保存到包中(這意味着該路徑將位於主包中)。我想要在setInput方法的頂部檢查和創建數據庫。我一直在搜索類似的東西,但我還沒有提出任何事情。任何幫助非常感謝。這裏是我的代碼:檢查一個表是否存在,如果它不存在,創建它... iOS/SQLite

-(IBAction)setInput:(id)sender 
{ 
    NSString *strStoreNumber; 
    NSString *strRegNumber; 

    strStoreNumber = StoreNumber.text; 
    strRegNumber = RegNumber.text; 
    lblStoreNumber.text = strStoreNumber; 
    lblRegNumber.text = strRegNumber; 

    NSString* databasePath = [[NSBundle mainBundle] pathForResource:@"tblStore" ofType:@"sqlite"]; 

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
    { 
     NSLog(@"Opened sqlite database at %@", databasePath); 
     sqlite3_exec(database, "CREATE TABLE IF NOT EXISTS tblStore (ID INTEGER PRIMARY KEY AUTOINCREMENT, Message TEXT)", NULL, NULL, NULL); 
     //...stuff 
    } 
    else 
    { 
     NSLog(@"Failed to open database at %@ with error %s", databasePath, sqlite3_errmsg(database)); 
     sqlite3_close (database); 
    } 
//  
    NSString *querystring; 

    // create your statement 
    querystring = [NSString stringWithFormat:@"SELECT strStore, strReg FROM tblStore WHERE strStore = %@ AND strReg = %@;", strStoreNumber, strRegNumber]; 

    const char *sql = [querystring UTF8String]; 

    NSString *szStore = nil; 
    NSString *szReg = nil; 

    sqlite3_stmt *statement = nil; 
    if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL)!=SQLITE_OK) //queryString = Statement 
    { 
     NSLog(@"sql problem occured with: %s", sql); 
     NSLog(@"%s", sqlite3_errmsg(database)); 
    } 
    else 
    { 
     // you could handle multiple rows here 
     while (sqlite3_step(statement) == SQLITE_ROW) 
     {    
      szStore = [NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 0)]; 
      szReg = [NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 1)]; 
     }   

    } 

    sqlite3_finalize(statement); 

    lblStoreNumber.text = szStore; 
    lblRegNumber.text = szReg; 

// 
} 

我還是很新到iOS和SQLite,所以如果我沒有提供我想要做的,讓我知道足夠準確的描述,我會盡力更具體。謝謝!

回答

5

快速搜索「iphone sql創建表如果不存在」給了this作爲最高結果。

的SQL的這部分也可能是你在找什麼:

CREATE TABLE IF NOT EXISTS tableName(...) 

,如果它不存在創建一個表。

+0

我在sqlite3_open方法下編輯了我的代碼,併爲表創建添加了類似的邏輯。我將我的現有表從我的項目中刪除(通過Finder),當我嘗試運行該應用程序時,出現錯誤:「error:/ Users/Matt ****/Documents/iOS Projects/CCoDBTry/CCoDBTry/tblStore。 sqlite:沒有這樣的文件或目錄「。你能否提供更多的見解? – Skizz

+0

我想我也沒有關注如何讓它不存在。我認爲從Finder的項目位置移除它會做到這一點,但是當我這樣做時我甚至無法編譯。有什麼想法嗎? – Skizz

+0

好像你不僅刪除了表格,而且刪除了整個數據庫。您可以嘗試恢復您在Finder中刪除的數據庫文件,然後重試。如果你只想刪除那個特定的表,你可以使用'DROP TABLE tableName'。另外,請查看[本博客](http://www.icodeblog.com/2008/08/19/iphone-programming-tutorial-creating-a-todo-list-using-sqlite-part-1/#init- D b)。 – matsr

相關問題