2012-06-27 17 views
5

मैं आईफोन ऐप पर काम कर रहा हूं और अपने बटन क्लिक पर निम्न कोड कॉल कर रहा हूं, यह केवल मेरी पहली बार क्लिक करने के लिए डाटाबेस टेबल अपडेट कर रहा है। जब मैं इसे दूसरी बार क्लिक करता हूं तो यह मुझे सफलता संदेश देता है लेकिन डेटाबेस तालिका अद्यतन नहीं हो रही है।आईफोन डाटाबेस अपडेट इश्यू

कोड है:

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

NSMutableArray *arrayRandomLevel = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"4",@"5",nil]; 
for (int i = 0; i< 5; i++) 
{ 
    NSUInteger randomIndex = arc4random() % 5; 
    [arrayRandomLevel exchangeObjectAtIndex:i withObjectAtIndex:randomIndex]; 
    //firstObject +=1;  
} 
NSLog(@"arrayRandomLevel = %@",arrayRandomLevel); 

for (int level = 0; level < 5; level++) 
{ 
    NSString *strLevel = [@"" stringByAppendingFormat:@"%d",level+1]; 
    int finalLevel = [[arrayRandomLevel objectAtIndex:level] intValue]; 

    NSLog(@"Static level = %@, Changed level = %d",strLevel,finalLevel); 

    sqlite3 *database; 
    if(sqlite3_open([path UTF8String], &database) == SQLITE_OK) 
    { 

     NSString *cmd = [NSString stringWithFormat:@"UPDATE zquestionsdata SET zdifficultylevel = %d WHERE zanswertype = '%@' AND zquestiontype = '%@';",finalLevel,strLevel,@"Geni"]; 

     const char * sql = [cmd UTF8String]; 

     sqlite3_stmt *compiledStatement; 

     if(sqlite3_prepare_v2(database, sql, -1, &compiledStatement, NULL) == SQLITE_OK) 
     { 
      sqlite3_step(compiledStatement); // Here is the added step. 
      NSLog(@"update SUCCESS - executed command %@",cmd); 
     } 
     else { 
      NSLog(@"update FAILED - failed to execute command %@",cmd); 
     } 

     sqlite3_finalize(compiledStatement); 

    } 
    else { 
     NSLog(@"pdateContact FAILED - failed to open database"); 
    } 

    sqlite3_close(database); 

} 

कृपया मुझे इस पर मदद या तालिका हर बार अद्यतन करने के लिए किसी अन्य समाधान प्रदान करते हैं। अग्रिम धन्यवाद।

+0

अपने NSString * cmd NSLog दिया जाता है, सांत्वना से संदेश को कॉपी फिर अपने SQLite डेटाबेस ब्राउज़र पर पेस्ट करना इस लाइन zquestiontype में क्वेरी – janusbalatbat

+0

परीक्षण करने की कोशिश @ '; ", मुझे नहीं लगता कि आपको अर्धविराम की आवश्यकता है – janusbalatbat

+1

मैं cmd ​​की प्रतिलिपि बनाता हूं और एसक्लाइट ब्राउज़र पर चलाने की कोशिश करता हूं, वहां काम करता हूं और टेबल पंक्तियों को अद्यतन करता हूं। लेकिन मेरे फ़ंक्शन के माध्यम से नहीं। –

उत्तर

1

अद्यतन कर रहा है प्रक्रिया

अगर (sqlite3_step (बयान) == SQLITE_DONE)

वहाँ मूल्यों डेटाबेस में जाने के लिए और दुकान जाएगा बयान से ऊपर की तरह लग रहे सौंपा पर क्या होगा। बयान तैयार से

कोड = '% नीचे

if(sqlite3_prepare_v2(contactDB, insert_stmt, -1, &statement, NULL) == SQLITE_OK) 
    { 
     if(sqlite3_step(statement) == SQLITE_DONE) 
     { 
      //assign new values here 

     } 
    } 
+0

यह दूसरी बार सामान्य रूप से काम करता है अगर इसके अंदर आने पर क्लिक करें (sqlite3_step (कथन) == SQLITE_DONE) ब्लॉक लेकिन तालिका इसके साथ अपडेट नहीं हो रही है। पुराने परिणाम दिखा रहे हैं। मैं इसे दूसरे, तीसरे और फिर क्लिक पर अपडेट करना चाहता हूं –

संबंधित मुद्दे