【问题标题】:Data insertion problem in sqlitesqlite中的数据插入问题
【发布时间】:2011-03-25 10:19:54
【问题描述】:

我的表定义是: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/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);

}

我也尝试过没有限制,但同样的问题会继续..

如果一致性被删除,那么它会显示“数据库锁定”错误.. 我们怎样才能消除这个错误以及如何将数据插入数据库?

【问题讨论】:

    标签: iphone database xcode ipad sqlite


    【解决方案1】:

    关于“约束失败”的部分表示您违反了约束。这意味着您的 Product 表具有 PRIMARY KEY、UNIQUE 或 FOREIGN KEY 约束,并且您插入的值会违反这些约束。

    • 对于 PRIMARY KEY 和 UNIQUE 约束:您插入的是重复值。
    • 对于 FOREIGN KEY 约束:您插入的值在引用的表/字段中没有对应的匹配项。

    更新:当您有 INTEGER PRIMARY KEY AUTOINCREMENT 时,您不应在 INSERT 语句中指定 ProdID; SQLite 会自动生成。因此,将您的插入语句更改为

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

    因为你之后已经用

    检索了它
    rowID = sqlite3_last_insert_rowid(database);
    

    也不要忘记删除绑定!

    【讨论】:

    • 谢谢,我正在使用 PRIMARY KEY 和 UNIQUE 约束,但我没有插入重复值..
    • SQLite 说你是,而且在这些事情上它往往是正确的。您的表是否有任何触发器?
    • 我使用一个作为主键,另一个作为唯一键,两者是分开的,有问题吗?
    • 不,这应该不是问题。你能在你的问题中发布表格的定义吗?
    • CREATE TABLE "Product" ("ProID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "BarCode" VARCHAR NOT NULL UNIQUE , "ProductName" VARCHAR NOT NULL )
    猜你喜欢
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 2012-12-07
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多