Что мне нужно после инструкции INSERT? - PullRequest
0 голосов
/ 02 мая 2011

У меня есть оператор INSERT, затем SQLITE3_EXEC, затем оператор SELECT и еще один SQLITE3_EXEC.Я получаю SQLERROR 21 (SQLITE_MISUSE) для EXEC для оператора SELECT.

Я что-то упустил между двумя EXEC?как COMMIT, или?

Возможно ли, что 21 относится к попытке вставить уже существующую запись?

    NSString *insertCommand = [NSString stringWithFormat:@"INSERT INTO CardData (CARD_ID, CARD_NAME, CODE_VAL) VALUES ('/%@', '/%@', '/%@')",
                               symbol.data, @"Test Card", symbol.typeName];

    sqlite3_exec(db, [insertCommand UTF8String], NULL, NULL, &errmsg);
    if(errmsg != NULL)
        NSLog(@"insert error: /%@", &errmsg);  //  DEBUGGING ONLY!

    //  now, pull it back out of the d/b and display the data
    const char *sqlStatement = @"select CARD_ID, CARD_NAME, CODE_VAL from CardData";
    sqlite3_stmt *compiledStatement;
    int err = sqlite3_prepare_v2(db, [sqlStatement UTF8String], -1, &compiledStatement, NULL);  // Setup the SQL Statement and compile it for faster access
if(err != SQLITE_OK)
   NSLog(@"prepare error: /%@", err);
    else  { 
        // Loop through the results and add them to the feeds array
        while(sqlite3_step(compiledStatement) == SQLITE_ROW) {

            // Read the data from the result row
        resultText.text = [NSString stringWithFormat:@"\nDatabase: \n%@ \n%@ \n%@", resultText.text, 
            [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)],
            [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)],
            [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)]];
        }
    sqlite3_finalize(compiledStatement);  //  release it...
    sqlite3_close(db);
    }

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Согласно документации (1.4 Коды ошибок-> SQLITE_MISUSE) говорится, что вы можете получить эту ошибку, если попытаетесь получить доступ к закрытой базе данных или вызовете sqlite_exec с одним и тем же указателем базы данных из двух разных потоков. Просто проверьте эти 2 возможности в вашем случае.

Надеюсь, это поможет.

0 голосов
/ 03 мая 2011

Я решил использовать FMDB ... спасибо всем за предложения, я ценю ваше время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...