2014-10-09 53 views
0

在我的情況2我試圖替換qrcode的後來的sqlite條目。我想用新的FBid更新行。我如何選擇它並將其替換?這與SQLite有關嗎?還是有一些我需要在我的應用程序中應用的邏輯?如何有選擇地替換sqlite行?

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *docsPath = [paths objectAtIndex:0]; 
NSString *path = [docsPath stringByAppendingPathComponent:@"easyKTDB.sqlite"]; 

FMDatabase *database = [FMDatabase databaseWithPath:path]; 

[database open]; 

FMResultSet *results = [database executeQuery:@"select * from ktcode where code = ?;", qrCode]; 

while ([results next]) { 
    ktcode *aktcode = [ktcode new]; 
    aktcode.ktCODE = [results stringForColumn:@"code"]; 
    aktcode.ktFBID = [results stringForColumn:@"fbid"]; 
    aktcode.uniqueID = [results intForColumn:@"id"]; 

    [ktcodeArray addObject:aktcode]; 

} 

switch (ktcodeArray.count) 
{ 
    case 0 : 
     [database executeUpdate:@"insert into ktcode (code, fbid) values (?, ?)", qrCode, FBid]; 
     NSLog(@"%@ is now registered to %@ - %@", qrCode, userName, FBid); 
     break; 

    case 1: 
     [database executeUpdate:@"insert into ktcode (code, fbid) values (?, ?)", qrCode, FBid]; 
     NSLog(@"%@ now belongs to %@ - %@", qrCode, userName, FBid); 
     break; 

    case 2: 
     //[database executeUpdate:@""]; 
     NSLog(@"ktCodeArray: %@", ktcodeArray); 
     NSLog(@"%@ has been transfered to %@ - %@", qrCode, userName, FBid); 
     break; 

    default : 
     NSLog(@"Nothing else can be done"); 
     //delete multiple entries here 
+0

你基本上問「怎麼辦我在SQLite中執行UPDATE?「 – 2014-10-09 20:24:04

+0

(獲取sqlite3命令行工具並從命令窗口使用它,你可以從命令行對數據庫執行所有操作,看看它們是如何工作的,將它與基本的SQLite教程結合使用。) – 2014-10-09 20:26:00

+0

是的,但我如何選擇性地執行它?我將永遠擁有最多兩個具有相同qrcode但兩個不同fbid的條目。原始條目將保持不變。但第二個入口將不斷更新一個新的fbid。所以我想知道如何選擇更新的條目進行更新? – 2014-10-09 20:26:41

回答

0

看來你正在尋找的SQLite的REPLACE關鍵字:https://www.sqlite.org/lang_replace.html

如果你有獨特的標識符,那麼你可以做:

[database executeUpdate:@"replace into ktcode (id, code, fbid) values (?, ?, ?)", uniqueId, qrCode, FBid]; 
+0

謝謝!我知道我將不得不使用替換鍵,但我需要確保我不會替換兩個條目,所以我需要一種方法來選擇後面的條目,我想,我可能是錯的,我需要例如,只要你的表的關鍵字是'id',另一個項目就不會被替換,就包括一個where關鍵字,例如替換成ktcode(fbid)值(?),其中fbid!=?;「,FBid) – 2014-10-09 20:36:44

+0

。如果'id'不是一個鍵,那麼你可以選擇和使用'rowid'而不是https://www.sqlite.org/lang_createtable.html#rowid – markshiz 2014-10-09 20:46:56

+0

corrent我如果我錯了,但你說我需要替換哪裏的id是後面的那個? – 2014-10-09 20:49:31