2015-06-08 2 views
0

Я пытаюсь вставить два новых столбца в базу данных SQLite, если столбец недоступен. Все идет отлично, а также «добавленный» BOOL - ДА. Но эти столбцы не на моем столе!Добавить новый столбец в SQLite в iOS

-(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); 
    } 
} 
+1

Таким образом, вы не подготовить заявление, а потом .... ничего. Вы вообще не читали, как правильно использовать sqlite3. – Droppy

+0

Да, это проблема, есть ли у вас ссылка или что-то делать? @Droppy – Rudi

+1

Вот [один] (http://www.wassen.net/sqlite-c.html). Я просто googled для «использования sqlite3_prepare_v2». – Droppy

ответ

1

Вам нужно позвонить sqlite3_step() по крайней мере один раз, после sqlite3_prepare_v2(). Это функция, которая фактически выполняет запрос. Если вы читаете некоторые результаты SELECT, вам нужно будет вызвать эту функцию несколько раз (для каждой строки), но если вы просто выполняете запрос без каких-либо результатов, требуется только один вызов.

+1

Вы должны * не * вызывать 'sqlite3_step()', если 'sqlite3_prepare_v2()' возвращает ошибку (что в этом случае). –

0

Ok я узнал проблему:

  1. Как сказал @Droppy я только подготовила заявление, а потом ничего.

  2. Как @Googie сказал, я должен использовать sqlite3_step() хотя бы один раз.

  3. Я не могу добавить сразу несколько столбцов, и я должен добавить их по одному.

поэтому код,

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) 
     { 
} 
Смежные вопросы