2011-04-30 87 views
0

這裏是我用來插入一個記錄到表中的代碼...我需要的是這個函數來捕獲和返回插入的記錄ID ...這可能嗎?此代碼工作正常,併成功插入返回YES和NO的失敗......但我現在想返回一個整數插入ID ...但不能似乎想出一個辦法......返回插入ID後sqlite3_finalize

-(BOOL)insertEvent:(Event *)objEvent { Utils *objUtils = [[Utils alloc] init]; 

sqlite3_stmt *insertStmt = nil; 
sqlite3 *aDatabase = nil; 

int ret = sqlite3_enable_shared_cache(1); 

if (sqlite3_open([databasePath UTF8String], &aDatabase) == SQLITE_OK) 
{ 
    if(insertStmt == nil) 
    {   
     NSString *aString = [NSString stringWithFormat:@"INSERT INTO tblEvent ('eventstartdate','eventdescription') VALUES ('%@','%@')",objEvent.eventstartdate, objEvent.eventdescription]; 
     const char *sql = [aString UTF8String]; 
     if(sqlite3_prepare_v2(aDatabase, sql, -1, &insertStmt, NULL) != SQLITE_OK) 
     { 
      NSAssert1(0, @"Error while creating insertTip add statement. '%s'", sqlite3_errmsg(aDatabase)); 
      return NO; 
     } 
     [objUtils release]; 
    } 

    if(SQLITE_DONE != sqlite3_step(insertStmt)) { 
     NSAssert1(0, @"Error while inserting into TipsTracker. '%s'", sqlite3_errmsg(aDatabase)); 
     return NO; 
    } 
    sqlite3_reset(insertStmt); 

    if (insertStmt) 
    { 
     sqlite3_finalize(insertStmt); 
     insertStmt = nil; 
    } 
} 
sqlite3_close(aDatabase); 
aDatabase = nil; 
return YES;} 

回答

0

試這個功能sqlite3_last_insert_rowid(database);

+0

嗯..當我嘗試調用它時會得到EXE_BAD_ACCESS .. – xoail 2011-04-30 06:08:08

+0

你需要改變數據庫對象「aDatabase」你是否在做「數據庫」? – Saurabh 2011-04-30 06:09:51

+0

沒關係...我在NSLog(@「%@」,...)中打印它,但不得不做NSLog(@「%lld」,..)...感謝xcode4的良好推薦:) – xoail 2011-04-30 06:13:57