2011-09-13 57 views
1

我創建了一個包含三個條目名稱,地址和電話號碼的表格。 現在我想刪除基於姓名文本字段中輸入姓名的數據。我成功地這樣做,但問題是,如果我鍵入一個名稱,這是不是在我的數據庫標籤仍然顯示「刪除聯繫人」 ......這裏是我的代碼如何從sqlite中刪除數據

-(void)deleteContact{ 
     const char *dbPath=[databasePath UTF8String]; 
     sqlite3_stmt *statement; 
     if (sqlite3_open(dbPath, &contactDB)==SQLITE_OK) 
      { 

    NSString *querySQL=[NSString stringWithFormat:@"delete from 
       contacts where name=\"%@\"",name.text]; 
    const char *query_stmt=[querySQL UTF8String]; 
     sqlite3_prepare_v2(contactDB, query_stmt,-1,&statement, NULL); 
     (sqlite3_step(statement)==SQLITE_OK); 

      [email protected]"Contact Deleted"; 
    [email protected]""; 
    [email protected]""; 
    [email protected]""; 

     sqlite3_finalize(statement); 

    } 
sqlite3_close(contactDB); 

[name resignFirstResponder]; 
} 

回答

2

刪除就OK即使沒有要刪除。 如果你需要知道是否有什麼東西要刪除,你應該檢查一下。

NSString *sql = [NSString stringWithFormat:@"select count (*) from contacts where name=\"%@\"", name.text]; 
sqlite3_stmt *stmt; 
int res = sqlite3_prepare_v2(database, [sql UTF8String], -1, &stmt, NULL); 
if (res != SQLITE_OK) { 
    NSLog(@"sqlite3_prepare_v2() failed"); 
    return; 
} 
int count = 0; 
if (sqlite3_step(stmt) == SQLITE_ROW) { 
    count = sqlite3_column_int(stmt, 0); 
} 
sqlite3_finalize(stmt); 

if (count == 0) { 
    // nothing to delete, do whatever you like 
} else { 
    // do real delete 
    // your code for that seems to be OK 
} 
+0

@valeriy ..非常感謝 – NoviceDeveloper

+0

@MUKESH不要提及它。投票回答哪個更適合你。 –

+0

@NoviceDeveloper能否請你出任我越來越prpare_v2提前 –

2

從YourTable其中name =「NameToDelete刪除「
將從表YourTable中刪除字段名稱等於NameToDelete的所有記錄。

+0

謝謝,但我的問題是,即使我輸入一個名稱,這是不是在我的數據庫中,狀態仍顯示聯繫人刪除。 – NoviceDeveloper

+1

Mukesh,也許這是因爲「sqlite3_step(語句)== SQLITE_OK」給出了一個積極的結果,如果你發射的查詢沒有錯誤並且是邏輯上正確的。它不檢查你的查詢是否刪除了任何記錄。您的查詢是正確的,因此每次都會返回OK狀態。即使在您發送不在數據庫中的名稱的時候,您也正在執行正確的操作。 –

+0

我想,您必須使用其他標誌而不是SQLITE_OK將您的狀態設置爲「聯繫已刪除」。 –