iPhone SQlite insert语句只执行一次

时间:2011-01-29 11:13:54

标签: insert sqlite ios-simulator lastinsertid

我使用sqlite3调用在我的应用程序中存储数据的旧学校方式。 我正在iphone模拟器上运行这个应用程序(4.1)

app是一个标签栏视图控制器,第一个视图是一个导航视图控制器,用于推送另一个执行插入的视图控制器。

insert将单个记录添加到数据库

  1. 我已将sqlite db文件复制到可写文档区域
  2. 数据库在appDelegate中打开,并由执行insert
  3. 的viewcontroller使用
  4. 插入语句本身已成功执行且无错误
  5. 我已手动遍历模拟器使用的sqlite db文件的路径,并且只能看到写入的一条记录。

    应用程序出于某种奇怪的原因,只在第一次执行应用程序时才将记录写入数据库。无法找到所有后续写入。

    插入部分的代码

    -(void) insertNewPerson:(ABRecordRef)person
    {
        CFStringRef fName, lName;
    
        fName = ABRecordCopyValue(person, kABPersonFirstNameProperty);
        lName = ABRecordCopyValue(person, kABPersonLastNameProperty);
        NSNumber *addressbookID = [NSNumber numberWithInteger: ABRecordGetRecordID(person)];
        FunTimeAppDelegate *appDelegate = (FunTimeAppDelegate *)[[UIApplication sharedApplication] delegate];
        static char *sql = "INSERT INTO contacts_main (uuid,abid,firstname,lastname,organisation) VALUES ('13568',?,?,?,'FunTime')";
        if (sqlite3_prepare_v2(appDelegate.database, sql, -1, &insert_statement, NULL) != SQLITE_OK) {
            NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(appDelegate.database));
        }
        else {
            sqlite3_bind_int(insert_statement, 1,addressbookID);
            sqlite3_bind_text(insert_statement, 2,[fName UTF8String],-1,SQLITE_STATIC);
            sqlite3_bind_text(insert_statement, 3,[lName UTF8String],-1,SQLITE_STATIC);
    
            int success = sqlite3_step(insert_statement);
            if (success != SQLITE_ERROR) {
                NSLog(@"SQLITE statement executed - new person added to database");
                NSLog(@"last inserted row id %d",sqlite3_last_insert_rowid(appDelegate.database));
                sqlite3_reset(insert_statement);
                sqlite3_finalize(insert_statement);
                NSLog(@"reset");
            }
            else{
                NSLog(@"SQLITE statement execution error");
                NSAssert1(0, @"Error: failed to insert into the database with message '%s'.", sqlite3_errmsg(appDelegate.database));
            }
        }
    }
    

0 个答案:

没有答案