我的表定义是:CREATE TABLE“Product”(“ProID”INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,“BarCode”VARCHAR NOT NULL UNIQUE,“ProductName”VARCHAR NOT NULL);
当我插入数据时我有类似的问题: 2011-03-25 15:43:08.792 BarCode12 [6698:207] *断言失败 - [sqlClass addRecord:],/ Users / admin /Desktop / BarCode14copy / Class / 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);
}
我也在没有约束的情况下尝试,但同样的问题将继续..
如果删除了一致性,则显示“数据库已锁定”错误。 我们如何删除此错误以及如何将数据插入数据库?
答案 0 :(得分:3)
关于“约束失败”的一点说你违反了约束。这意味着您的Product
表具有PRIMARY KEY,UNIQUE或FOREIGN KEY约束,并且您正在插入违反这些约束的值。
更新:如果有INTEGER PRIMARY KEY AUTOINCREMENT,则不应在INSERT语句中指定ProdID; SQLite会自动生成它。所以将insert语句更改为
INSERT INTO Product (BarCode , ProductName) Values (?,?)
因为您已经使用
检索了它rowID = sqlite3_last_insert_rowid(database);
也不要忘记删除绑定!