2009-11-08 16 views
7

मैं अपने डेटाबेस के प्रबंधन के लिए fmdb का उपयोग कर रहा हूं। मुझे fmdb में किसी तालिका से पंक्ति हटाने के लिए कोई उदाहरण नहीं मिला। मैंएक एसक्लाइट डेटाबेस तालिका में एक पंक्ति को कैसे हटाएं?

NSString *[email protected]"DELETE from tableName WHERE id=3";  
    FMResultSet *rs = [database executeQuery:sqlStat]; 

लेकिन कोशिश की अपने काम नहीं कर रहा है क्योंकि जब मैं तालिका में प्रविष्टियों की कुल संख्या की जाँच की, मैंने उपरोक्त कथन निष्पादित करने से पहले के रूप में एक ही नंबर मिल रहा है। तो, fmdb का उपयोग कर तालिका से पंक्ति को हटाने का उचित तरीका क्या है?

+0

सुनिश्चित करने के लिए आप तालिका में प्रविष्टियों की संख्या कैसे निर्धारित करने कर रहे हैं की जरूरत है? –

+0

उदाहरण के लिए। मैं कर रहा हूँ FMResultSet * rs = [डेटाबेस executeQuery: @ "tableName से * चुनें"]; और उसके परिणामस्वरूप एनएसएमयूटेबलएरे में परिणाम संग्रहित किया गया। – MAX

उत्तर

12

एफएमडीबी थोड़ा महंगा हो सकता है यदि आप एनएसएनंबर के रूप में ऑब्जेक्ट में पास नहीं करते हैं। यह फ़ॉर्मेटिंग प्रश्नों का समर्थित, और सुरक्षित तरीका है।

[db executeUpdate:@"DELETE FROM theTable WHERE id = ?", [NSNumber numberWithInt:myObject.id]]; 
+0

शानदार! यह मेरी समस्या हल हो गया! – Jon

11

आप बदलना चाहिए:

... [डेटाबेस executeQuery: sqlStat] ...

साथ

:

... [डेटाबेस executeUpdate: sqlStat];

इसके अलावा, जोड़ने का प्रयास करें:

अपने CRUD ब्लॉक, और
[database beginTransaction]; 

से पहले:

[database commit]; 

एक अद्यतन/हटाने/डालने आपरेशन को क्रियान्वित करने के बाद।

;)

+0

यह सुनिश्चित नहीं है कि यह किसी और की मदद करेगा लेकिन मैं कमांड लाइन से sqlite3 का उपयोग कर रहा हूं और मैंने अपना 'DELETE' कथन चलाने के बाद' 'TRANSACTION; 'पहले और' COMMIT; 'जारी किया था। मेरा पहला समय सीएलआई का उपयोग कर रहा है और यह मेरे लिए काम करता है। टिप के लिए धन्यवाद, @ फ्लोरिन। – harperville

+0

एनपी, @harperville :) – Florin

+0

[डेटाबेस executeUpdate: sqlStat] के साथ काम किया, जहां sqlStat "हटाएं" है – kokemomuke

1

मैं भी एक ही लक्षण में फंस गयी। और मेरी समस्या मैं कॉल फ्लॉप (और "स्मृति से बाहर" की वजह से त्रुटि)

[db open]; 

यह करने के लिए अपने fmdb जारी करता है डिबग करने के लिए सुनिश्चित हो था db.traceExecution = हाँ; db.logsErrors = हाँ;

0

आप सभी प्रक्रियाओं

NSString *query = @"delete from places where published = 1"; 
const char *sqlStatement = [query UTF8String]; 
sqlite3_stmt *compiledStatement; 
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { 
    // Loop through the results and add them to the feeds array 
    while(sqlite3_step(compiledStatement) == SQLITE_ROW) { 
     // Read the data from the result row 
     NSLog(@"result is here"); 
    } 

    // Release the compiled statement from memory 
    sqlite3_finalize(compiledStatement); 

} 
int numberOfEffectedRow = sqlite3_changes(database); 
return numberOfEffectedRow; // get number of effected rows 
संबंधित मुद्दे