2012-08-24 13 views
11

मुझे इन त्रुटियों के बारे में कई पोस्ट खोजना पड़ा, लेकिन फिर भी मैं समस्या को ठीक नहीं कर सकता। मेरा कोड यहां है, क्या कोई मुझे यह देखने में मदद कर सकता है कि क्या गलत हो रहा है?ऐसी कोई तालिका त्रुटि

- (void) copyDatabaseIfNeeded { 


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

    if (sqlite3_open([path UTF8String], &newDBconnection) == SQLITE_OK) 
    { 
     NSLog(@"Database opened successfully"); 

if(updateStmt == nil) { 
      NSString *updStmt = [NSString stringWithFormat: @"UPDATE Coffee SET CoffeeName = '500 Plus', Price = '1.40' Where CoffeeID= '3'"]; 
    const char *mupdate_stmt = [updStmt UTF8String]; 

if(sqlite3_prepare_v2(newDBconnection, mupdate_stmt, -1, &updateStmt, NULL) != SQLITE_OK){ 
NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(newDBconnection)); 
      } else { 
       NSLog(@"Update successful"); 
      } 

     } 
     if(SQLITE_DONE != sqlite3_step(updateStmt)) 
      NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(newDBconnection)); 
     else { 
      sqlite3_reset(updateStmt); 
      NSLog(@"Step successful"); 

     } 
    } 
    else 
    { 
     NSLog(@"Error in opening database "); 
    } 
} 

उत्तर

21

SQL.sqlite में Coffee कोई तालिका नहीं है।

SQLite चुपचाप डेटाबेस फ़ाइल बनाता है अगर यह अस्तित्व में नहीं है। तो अगर आपको path गलत मिला है, तो आप एक खाली डेटाबेस फ़ाइल खोल रहे हैं, जिसमें निश्चित रूप से कोई भी तालिका नहीं है। सुनिश्चित करें कि डेटाबेस फ़ाइल मौजूद है और यह खाली नहीं है।

आप देख सकते हैं कि SELECT * FROM sqlite_master; क्वेरी चलाकर डेटाबेस में कौन सी सारणीएं हैं।

+0

मैं SQL "SELECT * से sqlite_master" निष्पादित करके कॉफी तालिका पा सकता हूं, और जब डेटाबेस अपडेट हो जाता है, तो डेटाबेस सफलतापूर्वक खोला जाता है, त्रुटि – Sunny

+1

@Sunny होती है यदि आप इसे SQLite ब्राउज़र या कमांड- लाइन उपकरण, आप अलग फ़ाइल खोल सकते हैं। 'UPDATE' करने से पहले उसी कोड द्वारा लॉग और क्वेरी 'sqlite_master' में' पथ 'डंप करें। – hamstergene

+0

ठीक है .. यह अब काम कर रहा है :) आपको बहुत धन्यवाद – Sunny

1

एक बात मेरी डीबीए मुझसे कहता है जब मैं डेटाबेस समस्याओं (इस मामले में ओरेकल) है, कमांड लाइन उपकरण का उपयोग कर क्वेरी कोशिश करने के लिए है।

  1. भागो iPhone सिम्युलेटर में अनुप्रयोग इतना डेटाबेस बनाई गई है/दस्तावेज़ निर्देशिका में कॉपी किया:

    इस तरह आप sqlite3 और iPhone सिम्युलेटर के साथ समस्याओं का निदान होता है।

  2. प्रारंभ टर्मिनल
  3. cd ~/Library/Application Support/iPhone Simulator/<version>/Applications/<your-app-hash>/Documents। सिम्युलेटर में केवल एक ऐप इंस्टॉल करना सबसे अच्छा है, इसलिए यह स्पष्ट है कि ऐप क्या है।
  4. sqlite3 SQL.sqlite और वहां से अपनी क्वेरी का प्रयास करें। स्कीमा कैसा दिखता है यह देखने के लिए आप .schema कमांड का भी उपयोग कर सकते हैं।

यदि क्वेरी वहां काम करती है और आपके ऐप में नहीं है तो आपको पता है कि आपके पास एक बग है, अन्यथा आपके पास एक स्क्लाइट क्वेरी समस्या या टूटी स्कीमा है।

+0

अजीब लेकिन, कमांड लाइन मेरी क्वेरी से काम कर रहा है लेकिन ऑब्जेक्टिव-सी से पर बनाए जाते हैं की कोशिश यह नहीं है। मैंने अभी नई टेबल जोड़ दी है और यह बग होता है। मुझे एक स्थिति भी होती है जब यह कभी-कभी काम करती है और अचानक टूट जाती है। – mr5

0

अनुप्रयोग में टेबल फिर से स्थापित करने app.sometimes स्थापित करने के समय यह हो सकता है क्योंकि टेबल नहीं बनाई गई हैं

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