在iOS中向SQLite添加新列

时间:2015-06-08 07:46:53

标签: ios sqlite

如果列不可用,我试图在我的SQLite数据库中插入两个新列。一切都很顺利,而且还增加了#39; BOOL是YES。但这些专栏不在我的桌子上!

-(void)checkColumnExists
{
    NSString *dbPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"movieData.sqlite"];
    const char *dbpath = [dbPath UTF8String];
    sqlite3 *contactDB;

    sqlite3_open(dbpath, &contactDB);

    sqlite3_stmt *selectStmt;

    const char *sqlStatement = "SELECT borrowMovie from myMovies";
    if(sqlite3_prepare_v2(contactDB, sqlStatement, -1, &selectStmt, NULL) != SQLITE_OK){
        //ALTER TABLE {tableName} ADD COLUMN COLNew {type};
        const char *sqlStatement1 = "ALTER TABLE myMovies ADD COLUMN borrowMovie TEXT, borrowDate TEXT";
        BOOL added = sqlite3_prepare_v2(contactDB, sqlStatement1, -1, &selectStmt, NULL);
    }
} 

2 个答案:

答案 0 :(得分:1)

您需要在sqlite3_step()之后至少致电sqlite3_prepare_v2()一次。这是实际执行查询的函数。如果您正在阅读一些SELECT结果,则需要多次调用该函数(对于每一行),但如果您只是执行没有结果的查询,则只需要一次调用。

答案 1 :(得分:0)

好的,我发现了问题:

  1. 正如@Droppy所说,我刚刚准备好了这个陈述,然后什么都没有。

  2. 正如@Googie所说,我必须至少使用一次sqlite3_step()。

  3. 我不能一次添加多个列,我必须逐个添加它们。

  4. 所以代码是,

    NSString *updateSQL = [NSString stringWithFormat: @"ALTER TABLE myMovies ADD COLUMN borrowMovie TEXT"];
            //
            const char *update_stmt = [updateSQL UTF8String];
            sqlite3_prepare_v2(database, update_stmt, -1, &statement, NULL);
    
            if(sqlite3_step(statement)==SQLITE_DONE)
            {
    }