Проблема вставки данных в sqlite - PullRequest
3 голосов
/ 25 марта 2011

Моя таблица определена следующим образом: CREATE TABLE "Product" ("INTIDER PRIMARY KEY AUTOINCREMENT NOT NULL", "ProID" INTARER NOT NULL, VARCHAR "ProductName" NOT NULL ";у меня есть проблема как: 2011-03-25 15: 43: 08.792 BarCode12 [6698: 207] * Ошибка подтверждения в - [sqlClass addRecord:], / Users / admin / Desktop / BarCode14copy / Classes / sqlClass.m: 121 2011-03-25 15: 43: 08.793 BarCode12 [6698: 207] * Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Ошибка при вставке данных.'ограничение не выполнено' '...

Написанный код: - (void) addRecord: (NSMutableDictionary *) recordDict {

if(addStmt == nil) {
    const char *sql = "insert into Product(ProID, BarCode , ProductName ) Values(?,?,?)";
    if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
        NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
}
NSInteger recordId =  [[recordDict objectForKey:@"ProID"] intValue];
NSLog(@"%d",recordId);
sqlite3_bind_int(addStmt, 1,recordId);
sqlite3_bind_text(addStmt, 2, [[recordDict objectForKey:@"BarCode"] UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(addStmt, 3, [[recordDict objectForKey:@"ProductName"] UTF8String], -1, SQLITE_TRANSIENT);


if(SQLITE_DONE != sqlite3_step(addStmt))
    NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
else
    sqlite3_last_insert_rowid
    rowID = sqlite3_last_insert_rowid(database);
NSLog(@"last inserted rowId = %d",rowID);

sqlite3_reset(addStmt);

}

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

если согласованность удалена, то она показывает ошибку «База данных заблокирована». Как мы можем удалить эту ошибку и как вставить данные в базу данных?

1 Ответ

3 голосов
/ 25 марта 2011

Бит про "ограничение не выполнено" говорит о том, что вы нарушаете ограничение. Это означает, что ваша таблица Product имеет ограничения PRIMARY KEY, UNIQUE или FOREIGN KEY и что вы вставляете значения, которые нарушают эти ограничения.

  • Для ограничений PRIMARY KEY и UNIQUE: вы вводите повторяющееся значение.
  • Для ограничений FOREIGN KEY: вы вставляете значение, для которого нет соответствующего соответствия в указанной таблице / поле.

Обновление : если у вас есть INTEGER PRIMARY KEY AUTOINCREMENT, вам не следует указывать ProdID в вашем операторе INSERT; SQLite сгенерирует его автоматически. Поэтому измените ваш оператор вставки на

INSERT INTO Product (BarCode , ProductName) Values (?,?)

, так как вы уже получаете его потом с помощью

rowID = sqlite3_last_insert_rowid(database);

Не забудьте также снять переплет!

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