Невозможно получить значение из последней строки вставки в базе данных SQL - PullRequest
1 голос
/ 16 февраля 2010

У меня проблема при получении значения первичного ключа последней вставленной строки в базе данных.

У меня есть таблица с именем wineDetails, которая содержит более 2000 наименований вин. Я отображаю имена в алфавитном порядке.

Когда я добавляю новое имя вина в таблицу wineDetails, новый первичный ключ имени вина - 2001 в базе данных, но когда я отображаю названия вин в алфавитном порядке, я получаю значение первичного ключа другого имени вина вместо 2001 года.

Чтобы получить последние вставленные строки первичного кея, я написал код как:

- (void)addWineDetails:(wineDetails *)awineDet 
{
    sqlite3_stmt *insert_statement;
    static char *sql = "INSERT INTO wineDetails (name,regionId,categoryId) VALUES (?,?,?)";
    if (sqlite3_prepare_v2(database, sql, -1, &insert_statement, NULL) != SQLITE_OK)
    {       
        NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
    }
    sqlite3_bind_text(insert_statement, 1, [[awineDet wine_Name]UTF8String] , -1, SQLITE_TRANSIENT);
    sqlite3_bind_int(insert_statement, 2,[awineDet region_Id]);
    sqlite3_bind_int(insert_statement, 3,[awineDet category_Id]);
    int success = sqlite3_step(insert_statement);
    sqlite3_finalize(insert_statement);
    if (success == SQLITE_ERROR)
    {
        NSAssert1(0, @"Error: failed to insert into the database with message '%s'.", sqlite3_errmsg(database));
    } 
    else
    {
        primaryKey = sqlite3_last_insert_rowid(database);
        int lastInsertId =  sqlite3_last_insert_rowid(database);
        wineDetPk = lastInsertId;
        printf("\n last insert id in adding:%d",lastInsertId);
        printf("\nwineDetPk id in adding:%d",wineDetPk);
    }
}

Ребята, пожалуйста, помогите мне выбраться из этого.

Любая помощь будет оценена по достоинству.

Спасибо, Мониш Кумар.

1 Ответ

0 голосов
/ 16 февраля 2010

Последний автоидентификатор
Он генерируется auto_increment?
Если это так, вы можете просто использовать саму функцию вставки.

Я также заметил, что вы пытаетесьполучить PK и ID вставки.Насколько я знаю, auto_increment должен также быть первичным ключом.Так что это немного избыточно.

Если вы добавите, какая ошибка в данный момент, я мог бы посоветовать еще.

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