2011-04-25 85 views
1

我正在嘗試創建一個包含多個列的表。我試圖綁定值(這是一個變量)來創建表名。我不斷收到一個錯誤:('創建update語句時出錯''near'?':syntax error'')顯然,我嘗試綁定它時出錯。任何人都可以爲我闡明這一點嗎?針對iOS的Sqlite語句

- (void)addTable{ 

    NSString *cat = sourceName; 

    if(addtablestmt == nil) { 

    const char *sqlStr = "CREATE Table ? ('itemID' 'integer','itemName' 'char(50)','itemCategory' 'char(50)','itemCount' 'integer','itemDone' 'char(50)','itemNote' 'char(50)','itemOrder' 'char(50)',PRIMARY KEY (itemID))"; 


    if(sqlite3_prepare_v2(database, sqlStr, -1, &addtablestmt, NULL) != SQLITE_OK) 
     NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(database)); 

    sqlite3_bind_text(addtablestmt, 1, [cat UTF8String], -1, SQLITE_TRANSIENT); 

    } 

    if(SQLITE_DONE != sqlite3_step(addtablestmt)){ 
     NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(database)); 

    } 

    sqlite3_reset(addtablestmt); 

} 
+0

你確定sqlite支持這樣的動態表創建嗎? – Rayfleck 2011-04-25 17:38:00

+0

我認爲它支持它,但我可能會在這裏走錯路。 – 2011-04-25 17:45:03

+0

我在這裏擺脫了我的元素(多年來沒有做過動態sql),但通常是構建動態查詢或更新語句,而不是動態創建表。在這裏打個盹,有一段驚人的編纂經驗。 – Rayfleck 2011-04-25 18:38:58

回答

0

你可以嘗試更多的東西一樣:

NSString *sqlStr = [NSString stringWithFormat:@"CREATE Table %@ ('itemID' 'integer','itemName' 'char(50)','itemCategory' 'char(50)','itemCount' 'integer','itemDone' 'char(50)','itemNote' 'char(50)','itemOrder' 'char(50)',PRIMARY KEY (itemID))", sourceName]; 

if(sqlite3_prepare_v2(database, [sqlStr UTF8String], -1, &addtablestmt, NULL) != SQLITE_OK) 
     NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(database)); 
0

不能綁定表名作爲參數。如果您打算這麼做,那麼您需要按照Joe的建議動態創建字符串。但要小心,因爲這種方法可能會導致SQL注入攻擊。例如,用戶可以輸入名稱「;從sqlite_master刪除」。