适用于iOS的Sqlite语句

时间:2011-04-25 17:11:53

标签: iphone 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);

}

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:0)

您不能将表名绑定为参数。如果您打算这样做,那么您需要按照Joe的建议动态创建字符串。但请小心,因为该方法可能导致SQL注入攻击。例如,用户可以输入名称“;从sqlite_master中删除”。