Вставить в разные таблицы в SQlite - PullRequest
1 голос
/ 03 февраля 2011

Мне нужно вставить кучу данных в приложение для iPhone, но в разные таблицы. Имя таблицы в этих данных.

Вот что я пытался сделать:

    NSString *statement = @"insert into ? values (?, ?, 0)";
    sqlite3_stmt *compiledStatement;
    if(sqlite3_prepare_v2(database, [statement UTF8String], -1, &compiledStatement, NULL) == SQLITE_OK)
    {
        for(UpdateItems *item in updateData){
            sqlite3_bind_text(  compiledStatement, 1, [item.table UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(  compiledStatement, 2, [item.code UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(  compiledStatement, 3, [item.data UTF8String], -1, SQLITE_TRANSIENT);

            while(YES){
                NSInteger result = sqlite3_step(compiledStatement);
                if(result == SQLITE_DONE){
                    break;
                }
                else if(result != SQLITE_BUSY){
                    break;
                }
            }
            sqlite3_reset(compiledStatement);
        }
    } else  
        printf("db error: %s\n", sqlite3_errmsg(database)); 

    sqlite3_finalize(compiledStatement);
    sqlite3_close(database);

При запуске вышеуказанного скрипта я получаю сообщение об ошибке: нет такой таблицы:? , что нормально, так как в операторе sqlite3_prepare_v2 данные еще не были связаны, поэтому SQLite не знает таблицу.

Теперь я переместу блок отверстия sqlite3_prepare_v2 внутри цикла и, используя stringWithFormat, поменяю первый знак вопроса с именем таблицы и после его подготовки, но есть ли другое решение для этого - более простое?

1 Ответ

1 голос
/ 03 февраля 2011

Это самое простое правильное решение.

Тем не менее, производительность не всегда подготавливает запросы. Если производительность является проблемой, я бы порекомендовал создать карту от имени таблицы до подготовленного запроса. Тогда вам нужно будет подготовить запрос только при первом обнаружении имени таблицы.

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