2012-08-24 21 views
11

Ho dovuto cercare molti post su questi errori, ma ancora non riesco a risolvere il problema. Ecco il mio codice, qualcuno può aiutarmi a vedere cosa sta andando storto?Errore tabella non corrispondente

- (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 "); 
    } 
} 

risposta

21

Nessuna tabella Coffee in SQL.sqlite.

SQLite crea silenziosamente il file di database se non esiste. Quindi, se hai il path sbagliato, stai aprendo un file di database vuoto, che ovviamente non contiene tabelle. Assicurati che il file del database esista lì e non sia vuoto.

È possibile visualizzare quali tabelle sono presenti nel database eseguendo la query SELECT * FROM sqlite_master;.

+0

Riesco a trovare il Coffee table eseguendo SQL "SELECT * FROM sqlite_master" e il database viene aperto correttamente, proprio quando si tratta di aggiornare, l'errore si verifica – Sunny

+1

@Sunny Se lo stai controllando con il browser SQLite o il comando- strumento linea, potresti aprire un file diverso. Scarica il 'percorso' nel log e esegui una query' sqlite_master' con lo stesso codice subito prima di eseguire 'UPDATE'. – hamstergene

+0

ok .. ora funziona :) grazie mille – Sunny

1

Una cosa mia DBA mi dice quando ho dei problemi di database (Oracle in questo caso), è quello di provare la query utilizzando gli strumenti della riga di comando.

Questo è come si dovrebbe diagnosticare i problemi con sqlite3 e il simulatore di iPhone:

  1. eseguire l'applicazione in iPhone Simulator in modo che il database viene creato/copiati nella directory Documenti.
  2. Start Terminal
  3. cd ~/Library/Application Support/iPhone Simulator/<version>/Applications/<your-app-hash>/Documents. È meglio avere una sola app installata nel simulatore, quindi è ovvio quale app è ciò che.
  4. sqlite3 SQL.sqlite e prova la tua richiesta da lì. Puoi anche usare il comando .schema per vedere come appare lo schema.

Se la query funziona lì e non nella tua App, allora sai di avere un bug, altrimenti hai un problema di query sqlite o uno schema rotto.

+0

Strano ma, dalla riga di comando la mia domanda è in funzione, ma da Objective-C, non lo è. Ho appena aggiunto una nuova tabella e questo errore si verifica. Ho anche una situazione in cui funziona a volte e improvvisamente è rotto. – mr5

0

provare a reinstallare le tabelle app.the vengono creati al momento della installazione dei app.sometimes potrebbe accadere perché le tabelle non vengono create

Problemi correlati