我使用sqlite3调用在我的应用程序中存储数据的旧学校方式。 我正在iphone模拟器上运行这个应用程序(4.1)
app是一个标签栏视图控制器,第一个视图是一个导航视图控制器,用于推送另一个执行插入的视图控制器。
insert将单个记录添加到数据库
我已手动遍历模拟器使用的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));
}
}
}