我正在尝试使用以下代码将记录插入sqlite3中的表中。该代码在iOS 8中正常工作,但在iOS 7.1.2中给出了断言错误。
表格创建:
NSLog(@"database path %@",self.databasePath);
if ([manager copyItemAtPath:sourcePath toPath:self.databasePath error:&error] == NO)
{
NSLog(@"Error : %@", [error localizedDescription]);
}
// createStmt = nil;
if (sqlite3_open([self.databasePath UTF8String], &database) == SQLITE_OK)
{
const char *sql_stmt = "CREATE TABLE IF NOT EXISTS CategoryTable (mainimg BLOB,addimg BLOB,cat_nm TEXT,image_nm TEXT,lastmodified TEXT,cat_desc TEXT,prod_id TEXT,prod_nm TEXT,prod_desc TEXT,sku TEXT,supplier_id TEXT,supplier_phone TEXT,product_dosage TEXT,unit_size TEXT,unit_price TEXT)";
//NSString *query=[NSString stringWithFormat:@"create table %@(rollNo integer, name text)",tableName];
if (sqlite3_prepare_v2(database, sql_stmt, -1, &statement, NULL) != SQLITE_OK) {
}
sqlite3_exec(database,sql_stmt, NULL, NULL, NULL);
const char *sql_stmt_promo = "CREATE TABLE IF NOT EXISTS PromotionalData (ImageData BLOB,ThumbData BLOB)";
if (sqlite3_prepare_v2(database, sql_stmt_promo, -1, &statement, NULL) != SQLITE_OK) {
}
sqlite3_exec(database,sql_stmt_promo, NULL, NULL, NULL);
}
sqlite3_close(database);
记录插入:
sqlite3 *database;
if (sqlite3_open([appdelegate.databasePath UTF8String], &database) == SQLITE_OK)
{
sqlite3_stmt *statement;
const char* sqliteQuery = "INSERT INTO CategoryTable (mainimg,addimg,cat_nm,image_nm,lastmodified,cat_desc,prod_id,prod_nm,prod_desc,sku,supplier_id,supplier_phone,product_dosage,unit_size,unit_price) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
if (sqlite3_prepare_v2(database, sqliteQuery, -1, &statement, NULL) == SQLITE_OK)
{
sqlite3_bind_blob(statement, 1, [mainimg bytes], [mainimg length], SQLITE_STATIC);
sqlite3_bind_text(statement, 2, [addimg UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 3, [cat_nm UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 4, [image_nm UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 5, [lastmodified UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 6, [cat_desc UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 7, [prod_id UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 8, [prod_nm UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 9, [prod_desc UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 10, [sku UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 11, [supplier_id UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 12, [supplier_phone UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 13, [product_dosage UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 14, [unit_size UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 15, [unit_price UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_step(statement);
sqlite3_finalize(statement);
NSLog(@"inserted ");
}
else
{
NSAssert1(0, @"error:'%s'", sqlite3_errmsg(database));
// NSLog(@"not inserted ");
}
sqlite3_close(database);
}
错误消息:
2015-07-08 08:54:17.819 SwaroopAgro [365:60b]断言失败 - [MainViewController Savemainimg:withaddimg:withcat_nm:withimage_nm:withlastmodified:withcat_desc:withprod_id:withprod_nm:withprod_desc:withsku:withsupplier_id:withsupplier_phone:withproduct_dosage :withunit_size:withunit_price:],/ Users / dhananjaypatil / Desktop / swaroop / SW copy 8.1 / swaroopAgro_iPhone 2 / SwaroopAgro / MainViewController.m:700 2015-07-08 08:54:22.616 SwaroopAgro [365:60b] 由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'错误:'表CategoryTable没有名为mainimg的列'' ***第一次抛出调用堆栈: (0x30ba0f83 0x3b351ccf 0x30ba0e5d 0x3154ed5b 0xeae13 0xea563 0xe993f 0xedd7d 0x314e0fc3 0x314e0f07 0x314e0e21 0x308070e7 0x30805cf7 0x30ad48f1 0x3079d6bb 0x3079d579 0x3079d40d 0x30b6c20b 0x30b6b6db 0x30b69ecf 0x30ad4ebf 0x30ad4ca3 0x359da663 0x3342114d 0xc1ea5 0x3b85eab7) libc ++ abi.dylib:以NSException类型的未捕获异常终止
答案 0 :(得分:0)
错误消息告诉您Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'error:'table CategoryTable has no column named mainimg''
。这是非常明显的:当您尝试插入值时,您的表CategoryTable
没有列mainimg
- 我假设它在插入期间发生。
由于您的CREATE TABLE IF NOT EXISTS
语句清楚地创建了该列,我唯一的猜测是您有时在过去更改了表的数据模式。在iOS8设备上,您之后安装了该应用程序。在iOS7上,您已经安装了应用程序。这导致iOS7上的表已经存在,具有错误的模式,但存在。因此,它不会被创建并保留其无效架构。
尝试从iOS7设备删除应用,然后重新运行应用。